1 #include<iostream> 2 #include<cstdio> 3 #include<stack> 4 using namespace std; 5 bool vis[50]; 6 int N; 7 int ans[50]; 8 //为什么只输出一个答案?? 9 void print() 10 { 11 for(int j=1;j<=N;j++) 12 { 13 printf("%5d",ans[j]); 14 } 15 cout<<endl; 16 } 17 18 void DFS(int step) 19 { 20 if(N<step)print(); 21 else 22 { 23 24 for(int i=1;i<=N;i++) 25 { 26 if(vis[i]==0) 27 { 28 vis[i]=1; 29 ans[step]=i;//存答案 30 DFS(step+1); 31 vis[i]=0;//因为回溯,i是更新的,可能大变小,所以得重新设置 32 //int j每次循环都开一个新j(九个数九个j) 每层递归的j都不一样 33 //如果每层都开一个新i,则不同的i作用域不同 34 //如果开全局变量的i,则回溯时的i不一定作用域是谁 35 } 36 } 37 } 38 } 39 int main() 40 { 41 cin>>N; 42 DFS(1); 43 return 0; 44 }标签:排列,int,namespace,50,vis,include From: https://www.cnblogs.com/xdzxxintong/p/16616293.html