DFS实现全排列

使用dfs的代码结构简洁明了,突然看到dfs实现的全排列,果然有种涨姿势的感觉。

来自手写代码必备手册_c

/* wikioi 1294 全排列, http://www.wikioi.com/problem/1294/ */
#include <stdio.h>
#include <string.h>
#define MAXN 10
int N;
int history[MAXN];
int count;
void dfs(int i) {
int j, k;
if (i == N) {
count++;
for (j = 0; j < N; j++) {
printf("%d ", history[j]);
}
printf("\n");
return;
}
for (k = 1; k <= N; k++) {
int ok = 1;
for (j = 0; j < i; j++) {
if (history[j] == k)
ok = 0;
}
if (ok) {
history[i] = k;
dfs(i + 1);
}
}
}
int main() {
scanf("%d", &N);
dfs(0);
return 0;
}


你可能感兴趣的:(DFS实现全排列)