用DFS输出n个数的全排列(递归实现)

最近在研究DFS,可能脑子不太够吧,很多题都不知道怎么实现,全排列应该是最简单的题了。
运行成功的代码如下所示:

#include #include #include using namespace std; int n; int vis[11] = {0} ; //访问数组 int numth[11] ; void dfs(int x) { int i; if(x>n) //x大于n时输出,不能等于,等于时numth[n]还没被赋值 { for(i=1; i<=n; i++) cout<>n) { memset(vis,0,sizeof(vis)); //访问数组置0 dfs(1); //数组numth[]从1开始遍历,注意不是0 } return 0; }

但是当我换了一种方式描述时,却出现了bug,我不知道问题出在哪里,可能以后我就突然解决了,还请各位大神多多帮助
#include #include #include using namespace std; int n; int vis[11] = {0} ; //访问数组 int numth[11] ; void dfs(int x) { int i; if(x>n) //x大于n时输出,不能等于,等于时numth[n]还没被赋值 { for(i=1; i<=n; i++) cout<>n) { memset(vis,0,sizeof(vis)); //访问数组置0 dfs(1); //数组numth[]从1开始遍历,注意不是0 } return 0; }

比如我输入3,表示要求3的全排列时,结果显示为
【用DFS输出n个数的全排列(递归实现)】3 2 1
然而上面正确的代码显示的是
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

    推荐阅读