백트래킹을 쓰는 문제.
처음 문제를 풀 때, 뭔지 모르겠는 부분이 있었다.
DFS 개념도 보고, 백트래킹도 보고 했지만 도저히 감을 못 잡았다. 그래서 답을 봤다. 하루종일 잡아도 못풀 것 같다는 생각이 들었다.
우선 내 코드는 아니다. 남들의 코드를 먼저 인용하겠다.
#include <stdio.h>
int r[8], n, m, v[9];
void recur(int k) {
int i;
if (k == m) {
for (i = 0 ; i < m ; i++) printf("%d ", r[i]);
printf("\n");
return;
}
for (i = 1 ; i <= n ; i++) {
if (!v[i]) {
v[i] = 1, r[k] = i;
recur(k + 1);
v[i] = 0;
}
}
}
int main() {
scanf("%d%d", &n, &m);
recur(0);
}
goooora님의 코드
-> https://www.acmicpc.net/source/8974737
백트래킹은 일반적인 DFS에 2가지가 추가된다.
이 부분은 나중에 따로 시간을 할애해 알고리즘-개념 시리즈에 올려둘 예정이다. 이 문제 푸는 방법 찾는다고 난리를 친 반동때문인지 며칠간 이 문제에 대한 풀이 후기를 작성할 생각을 접어뒀었다. 이제라도 써서 다행이다.