1. 程式人生 > >輸出全排列

輸出全排列

cal -s bottom step lin void sca left 順序

請編寫程序輸出前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 }

輸出全排列