D的小L
時間限制: 4000 ms | 記憶體限制: 65535 KB 難度: 2
- 描述
- 一天TC的匡匡找ACM的小L玩三國殺,但是這會小L忙着哩,不想和匡匡玩但又怕匡匡生氣,這時小L給匡匡出了個題目想難倒匡匡(小L很D吧 ),有一個數n(0<n<10),寫出1到n的全排列,這時匡匡有點囧了
NYOJ-366 D的小L 全排列 ,,,聰明的你能幫匡匡解圍嗎?NYOJ-366 D的小L 全排列 - 輸入
- 第一行輸入一個數N(0<N<10),表示有N組測試資料。後面的N行輸入多組輸入資料,每組輸入資料都是一個整數x(0<x<10) 輸出
-
按特定順序輸出所有組合。
特定順序:每一個組合中的值從小到大排列,組合之間按字典序排列。
樣例輸入 -
2 2 3
樣例輸出 -
12 21 123 132 213 231 312 321
1 /* 功能Function Description: NYOJ-366 全排列問題 2 開發環境Environment: DEV C++ 4.9.9.1 3 技術特點Technique: 4 版本Version: 5 作者Author: 可笑癡狂 6 日期Date: 20120802 7 備注Notes: 8 */ 9 10 11 //代碼一:---STL 12 #include<iostream> 13 #include<algorithm> 14 using namespace std; 15 16 int main() 17 { 18 int T,i,n; 19 int a[9]={1,2,3,4,5,6,7,8,9}; 20 cin>>T; 21 while(T--) 22 { 23 cin>>n; 24 // sort(a,a+n); 每次開始之前不用重新排列,因為生成所有全排列之後雖然跳出了do循環但是數組又回到了初始的升序狀态 25 do 26 { 27 for(i=0;i<n;++i) 28 cout<<a[i]; 29 cout<<endl; 30 }while(next_permutation(a,a+n)); 31 /* 32 for(i=0;i<9;++i) 33 cout<<a[i]; //測試跳出循環後輸出1 2 3 4 5 6 7 8 9 即又回到了初始升序的狀态 34 */ 35 } 36 return 0; 37 } 38 39 40 41 42 //代碼二:----遞歸+回溯 43 #include<iostream> 44 #include<cstring> 45 using namespace std; 46 47 bool visit[10]; 48 int n,a[10]; 49 50 void fun(int k) 51 { 52 int i; 53 if(k==n) 54 { 55 for(i=0;i<n;++i) 56 cout<<a[i]; 57 cout<<endl; 58 } 59 else 60 { 61 for(i=1;i<=n;++i) 62 if(!visit[i]) 63 { 64 a[k]=i; 65 visit[i]=true; 66 fun(k+1); 67 visit[i]=false; 68 } 69 } 70 } 71 72 int main() 73 { 74 int T; 75 cin>>T; 76 while(T--) 77 { 78 memset(visit,false,sizeof(visit)); 79 cin>>n; 80 fun(0); 81 } 82 return 0; 83 }