全排列板子
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;
}