dfs的典型递归,求全排列
#include <stdio.h>
#include <string.h>
#define maxn 50
using namespace std;
bool vis[10];
int ans[maxn];
int n;
void dfs (int t){
int i, j;
for (int i = 1; i <= n ; i++){
if (vis[i] == 0){
vis[i] = 1;
ans[t] = i;
if (t < n - 1)
dfs(t + 1);
else {
printf("%d", ans[0]);
for (int j = 1; j < n; j++)
printf(" %d", ans[j]);
printf("\n");
}
vis[i] = 0;
//注意这一句只有当填表完毕输出了结果后才有可能执行到
//填表完毕表示一个排列已经产生
//该数自然可以恢复自由身继续被访问了
}
}
}
int main()
{
while (scanf("%d", &n)!=EOF){
memset(vis, 0, sizeof(vis));
dfs(0);
}
}