遞歸--練習7--noi1750全排列
阿新 • • 發佈:2017-06-23
時間 iostream 而且 sin content sort ble ret param
遞歸--練習7--noi1750全排列
一、心得
二、題目
1750:全排列
- 總時間限制:
- 1000ms
- 內存限制:
- 65536kB
- 描述
-
給定一個由不同的小寫字母組成的字符串,輸出這個字符串的所有全排列。 我們假設對於小寫字母有‘a‘ < ‘b‘ < ... < ‘y‘ < ‘z‘,而且給定的字符串中的字母已經按照從小到大的順序排列。
- 輸入
- 輸入只有一行,是一個由不同的小寫字母組成的字符串,已知字符串的長度在1到6之間。
- 輸出
- 輸出這個字符串的所有排列方式,每行一個排列。要求字母序比較小的排列在前面。字母序如下定義:
已知S = s1s2...sk , T = t1t2...tk
s1 = t1, s2 = t2, ..., sp - 1 = tp - 1, sp < tp成立。 - 樣例輸入
-
abc
- 樣例輸出
-
abc acb bac bca cab cba
三、AC代碼
1 /* 2 noi1750全排列 3 //三個數組 4 一個是原來存儲基本數據的 5 一個是儲存答案的 6 一個是做標記的 7 還有有個數來存答案的位數的 8 */ 9 #include <iostream> 10 #include <algorithm> 11 using namespacestd; 12 int vis[10]; 13 char ans[10]; 14 void print(char ans[],int n){ 15 for(int i=0;i<n;i++){ 16 cout<<ans[i]; 17 } 18 cout<<endl; 19 } 20 void f(string s,int cur){ 21 int n=s.length(); 22 if(cur==n) print(ans,n); 23 else{ 24 for(int i=0;i<n;i++){25 if(!vis[i]){ 26 vis[i]=1; 27 ans[cur]=s[i]; 28 f(s,cur+1); 29 vis[i]=0; 30 } 31 } 32 } 33 34 } 35 36 int main(){ 37 string s; 38 cin>>s; 39 sort(s.begin(),s.end()); 40 f(s,0); 41 return 0; 42 }
遞歸--練習7--noi1750全排列