15649 - N과 M (1)
15649 문제 링크
접근법
재귀함수를 통한 DFS를 통해 구현할 수 있다.
#include <iostream>
#include <stdio.h>
#include <vector>
#include <time.h>
using namespace std;
bool visit[8] = {0,};
int num[8] = {1,2,3,4,5,6,7,8};
int M,N;
vector <int> vec;
void dfs(int cnt)
{
if(cnt == N)
{
for(int i=0; i< vec.size(); i++)
{
printf("%d ", vec[i]);
}
printf("\n");
}else
{
for(int i=0; i< M; i++)
{
if(visit[i] == 0)
{
vec.push_back(num[i]);
visit[i] = 1;
dfs(cnt+1);
vec.pop_back();
visit[i] = 0;
}
}
}
}
int main(void) {
cin >> M >> N;
dfs(0);
return 0;
}
결론
아직 재귀함수를 쓰는데 불편하다라는 생각이 많이 든다. 공부를 더 해야할 것 같다.