描述
给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。 我们假设对于小写字母有'a'
< 'b'
< ...
< 'y'
< 'z'
,而且给定的字符串中的字母已经按照从小到大的顺序排列。
思路
用dfs做,用一个数组存你的深搜用的字母,比如,你深搜a
,用一个数组存a
,字母数量够的时候,就输出就行。输出完要回溯,dfs函数最后也要回溯。
代码
#include<iostream>
#include<iomanip>
using namespace std;
string s;
int vis[100],n,a[100],cnt=0;
void dfs(int v){
vis[v]=1;
a[cnt++]=v;
if(cnt==s.size()){
for(int i=0;i<cnt;i++){
cout<<(char)(a[i]+'a');//输出的时候再转换成字母输出
}
cout<<endl;
cnt--;
vis[v]=0;
return ;
}
for(int i=0;i<s.size();i++){
if(!vis[s[i]-'a']) dfs(s[i]-'a');
}
vis[v]=0;
cnt--;
}
int main(){
cin>>s;
for(int i=0;i<s.size();i++){
if(!vis[s[i]-'a']){
dfs(s[i]-'a');//进去的是数字,a是1,b是2
}
}
return 0;
}