全排列板子
ti
#include<bits/stdc++.h>
using namespace std;
string s;
map<string, int>mp;
void swap(char &a, char &b){
char em = a;
a = b;
b = em;
}
void dfs(int n){ //将s[n~l]的全排列转化成s[n]s[n+1~l]的全排列
if(n == s.length()){
mp[s] = 1;
return ;
}
for(int i = n; i < s.length(); i ++ ){
swap(s[n], s[i]); //for和这个swap一起保证第n位所有字母都有可能
dfs(n + 1); //进到这一步,第n位的字母都定了,
swap(s[n], s[i]);
}
}
int main()
{
cin>>s;
dfs(0);
for(auto i = mp.begin(); i != mp.end(); i ++ ){
cout<<i->first<<endl;
}
return 0;
}
第二种解法
next_permutation,自带的全排列库函数,但是他只会按照输入的s的顺序排列,所以要先sort一下
#include<bits/stdc++.h>
using namespace std;
string s;
int main()
{
cin>>s;
sort(s.begin(), s.end());
cout<<s<<endl;
for(s.begin(); next_permutation(s.begin(), s.end());){
cout<<s<<endl;
}
return 0;
}