输出全排列
请编写程序输出前n个正整数的全排列(n<10),并通过9个测试用例(即n从1到9)观察n逐步增大时程序的运行时间。
输入格式:
输入给出正整数n(<10)。
输出格式:
输出1到n的全排列。每种排列占一行,数字间无空格。排列的输出顺序为字典序,即序列a1,a2,⋯,an排在序列b1,b2,⋯,bn之前,如果存在k使得a1=b1,⋯,ak=bk 并且 ak+1<bk+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 }
浙公网安备 33010602011771号