输入一个数,输出1-n的全排列
深度优先搜索的关键在于解决“当下该如何做”。至于“下一步如何做”则与“当下该如何做”是一样的。
#include <stdio.h>
int a[10], book[10], n;
void dfs(int step) {
int i;
if (step == n + 1) {
for (i = 1; i <= n; i++)
printf("%d", a[i]);
printf("\n");
return;
}
for (i = 1; i <= n; i++) {
if (book[i] == 0) {
a[step] = i;
book[i] = 1;
dfs(step + 1);
//printf("---");
book[i] = 0;
}
}
return;
}
int main() {
scanf("%d", &n);
dfs(1);
getchar(); getchar();
return 0;
}
将1-9数字不重复放到
+
=
,也就很好实现了,一共有168种不同组合。
#include <stdio.h>
int a[10], book[10], totle=0;
void dfs(int step) {
int i;
if (step == 10) {
if (a[1] * 100 + a[2] * 10 + a[3] + a[4] * 100 + a[5] * 10 + a[6] ==
a[7] * 100 + a[8] * 10 + a[9]) {
totle++;
printf("%d%d%d+%d%d%d=%d%d%d\n", a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9]);
}
}
for (i = 1; i <= 9; i++) {
if (book[i] == 0) {
a[step] = i;
book[i] = 1;
dfs(step + 1);
//printf("---");
book[i] = 0;
}
}
return;
}
int main() {
dfs(1);
printf("totle=%d", totle / 2);
getchar(); getchar();
return 0;
}