1. 程式人生 > >【楚楚街】解密

【楚楚街】解密

題目描述

亮亮深吸一口氣,小心地將盒子開啟,裡面是一張地圖,地圖上除了一些奇怪的字母以外沒有任何路線資訊,這可讓亮亮犯了愁,這些字母代表了什麼意思呢? 亮亮絞盡腦汁也想不出什麼思路,突然,亮亮眼前一亮,“我可以把這些字母所有的排列方式全部寫出來,一定可以找到答案!” 於是,亮亮興奮的開始尋找字母裡的祕密。

輸入描述:

每組資料輸入只有一行,是一個由不同的大寫字母組成的字串,已知字串的長度在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;
}