请编写程序输出前n个正整数的全排列(n<10),并通过9个测试用例(即n从1到9)观察n逐步增大时程序的运行时间。
输入给出正整数n(<10)。
输出1到n的全排列。每种排列占一行,数字间无空格。排列的输出顺序为字典序,即序列a?1??,a?2??,?,a?n??排在序列b?1??,b?2??,?,b?n??之前,如果存在k使得a?1??=b?1??,?,a?k??=b?k?? 并且 a?k+1??<b?k+1??。
3
123
132
213
231
312
321
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 int N; 5 6 int s[15],vis[15]; // 存放划分结果 7 int top = -1; // 数组指针 8 9 void dfs(int step); 10 11 int main () 12 { 13 scanf ("%d", &N); 14 15 dfs(1); 16 17 return 0; 18 } 19 20 void dfs(int step) 21 { 22 if (step==N+1) 23 { 24 for(int i=1;i<=N;i++) 25 cout<<s[i]; 26 cout<<endl; 27 return ; 28 } // 输出部分 29 else 30 { 31 for (int i=1; i<=N; i++) 32 { 33 if(vis[i]==0) 34 { 35 s[step] = i; 36 vis[i]=1; 37 dfs(step+1); 38 vis[i]=0;//回溯 39 } 40 } // 算法主体 41 } 42 }
原文:https://www.cnblogs.com/esther6/p/10621197.html