[九度][何海濤]文字列のソート

5970 ワード

タイトルの説明:
 
文字列を入力し、その文字列のすべての配列を辞書順に印刷します.例えば文字列abcを入力すると、文字a,b,cで並べられるすべての文字列abc,acb,bac,bca,cab,cbaが印刷される.
 
 
入力:
 
各テストケースには1行が含まれます.
9を超えない文字列を入力します(文字が重複する可能性があります)、文字には大文字と小文字のみが含まれます.
 
 
 
出力:
各セットのデータに対応して、辞書順にすべての配列を出力します.
 
 
 
 
サンプル入力:
abc
BCA

サンプル出力:
abc
acb
bac
bca
cab
cba
ABC
ACB
BAC
BCA
CAB
CBA

, , , , 。 cout , printf, C 。
 1 #include 
 2 #include <string>
 3 #include 
 4 #include 
 5 #include 
 6 #include 
 7 using namespace std;
 8 
 9 bool canUse[10];
10 
11 void dfs(int dep, int maxDep, string &s, char ans[])
12 {
13     if (dep == maxDep)
14     {
15         ans[dep] = '\0';
16         printf("%s
", ans); 17 return; 18 } 19 20 for(int i = 0; i < maxDep; i++) 21 if (canUse[i]) 22 { 23 if (i != 0 && s[i] == s[i-1] && canUse[i-1]) 24 continue; 25 26 canUse[i] = false; 27 ans[dep] = s[i]; 28 dfs(dep + 1, maxDep, s, ans); 29 canUse[i] = true; 30 } 31 } 32 33 int main() 34 { 35 string s; 36 while(cin >> s) 37 { 38 sort(s.begin(), s.end()); 39 memset(canUse, true, sizeof(canUse)); 40 char *ans = new char[s.size() + 1]; 41 dfs(0, s.size(), s, ans); 42 delete [] ans; 43 } 44 }

 



転載先:https://www.cnblogs.com/chkkch/archive/2012/11/21/2780757.html