05-05 19:21
Recent Posts
Recent Comments
관리 메뉴

너와나의 관심사

조합의 recursive 알고리즘 간단구현 본문

카테고리 없음

조합의 recursive 알고리즘 간단구현

벤치마킹 2018. 7. 22. 18:07

순열은 쉽게 brute force 로 구현이 가능한데 조합은 좀 헷갈리는 경우가 있다.

즉 아래 로또 처럼 조합의 문제일 경우 하나의 규칙을 정하는것이 중요하다. 예를 들면 오름 차순 같은 ..어떤 특정된 조건을 기준으로 

값을 정하면 된다. 


아래 문제를 문제를 저 아래 예제 코드를 참고하여 쉽게 풀수 있다.

알고리즘은 재미 있따고 생각해보자..   가끔 보면 재밌긴 한데 


즉 규칙을 정해보는 recursive code 

ttps://www.acmicpc.net/problem/6603






#include 
#include  
#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;



void dbg(vector  &v){


	for (int i = 0; i < v.size(); i++) cout << v[i] << " ";
	
	cout << "\n";

}



int N, C;
vector   visit;
int value[1000] = { 0, };


void print_out(vector  v){

	for (int i = 0; i   &v){
	if (v.size() == N){
		//print 
		print_out(v);
		return;
	}

	for (int i = 1; i <= N; i++){

		if (!visit[i]){
			visit[i] = true;
			v.push_back(i);
			perm(v);

			v.pop_back();
			visit[i] = false;
		}
	}

}


void comi(vector   &v, int value){
	if (v.size() == C){

		print_out(v);
		return;
	}

	for (int i = 1; i <= N; i++){

		if (!visit[i] &&  i > value ){
			//int tmp = visit[i];
			visit[i] =true;
			v.push_back(i);
			comi(v, i);

			v.pop_back();
			visit[i]  =  false;
		}
	}
}


int main(void){

	int tmp;
	//freopen("input.txt", "r", stdin);	setbuf(stdout, NULL);

	cin >> N >> C;

	vector  temp;
	visit.resize(N + 1, 0);

	comi(temp, 0);

	return 0;
}
Comments