【楚楚街】解密
阿新 • • 發佈:2018-11-05
題目描述
亮亮深吸一口氣,小心地將盒子開啟,裡面是一張地圖,地圖上除了一些奇怪的字母以外沒有任何路線資訊,這可讓亮亮犯了愁,這些字母代表了什麼意思呢? 亮亮絞盡腦汁也想不出什麼思路,突然,亮亮眼前一亮,“我可以把這些字母所有的排列方式全部寫出來,一定可以找到答案!” 於是,亮亮興奮的開始尋找字母裡的祕密。
輸入描述:
每組資料輸入只有一行,是一個由不同的大寫字母組成的字串,已知字串的長度在1到9之間,我們假設對於大寫字母有'A' < 'B' < ... < 'Y' < 'Z'。
輸出描述:
輸出這個字串的所有排列方式,每行一個排列,要求字母序比較小的排列在前面。
示例1
輸入
WHL
輸出
HLW HWL LHW LWH WHL WLH
#include "stdio.h" #include <math.h> #include <iostream> #include <vector> #include <stack> #include "limits.h" #include<algorithm> #include <unordered_map> using namespace std; void change(string& str, int left, int right) { char temp = str[left]; str[left] = str[right]; str[right] = temp; } void solve(vector<string>& ans, string str, int begin) { if(begin == str.size()) { ans.push_back(str); return; } for(int pos = begin;pos<str.size();pos++) { change(str, pos, begin); solve(ans, str, begin+1); change(str, pos, begin); } } int main() { string str; while(cin>>str) { vector<string> ans; solve(ans,str,0); sort(ans.begin(), ans.end()); for(auto item:ans) cout<<item<<endl; } return 0; }