#include<iostream> #include<algorithm> #include<cstring> using namespace std; const int N=10; char n[N]; char path[N]; bool used[N]; void dfs(int u) { if(u==strlen(n)) { for(int i=0;i<strlen(n);i++) cout<<path[i]; cout<<endl; return; } for(int i=0;i<strlen(n);i++) { if(!used[i]) { path[u]=n[i]; cout<<"path["<<u<<"]"<<"=n["<<i<<"]"<<endl; used[i]=true; cout<<"used["<<i<<"]=true"<<endl; dfs(u+1); used[i]=false; cout<<"used["<<i<<"]=false"<<endl; } else { cout<<n[i]<<"已经使用了"<<endl; } } } int main() { cin>>n; sort(n,n+strlen(n)); dfs(0); return 0; }
输入abc
输出结果
标签:字符,排列,递归,truea,truepath,used,使用,path,已经 From: https://www.cnblogs.com/weinan030416/p/17059547.htmlpath[0]=n[0]
used[0]=true
a已经使用了
path[1]=n[1]
used[1]=true
a已经使用了
b已经使用了
path[2]=n[2]
used[2]=true
abc
used[2]=false
used[1]=false
path[1]=n[2]
used[2]=true
a已经使用了
path[2]=n[1]
used[1]=true
acb
used[1]=false
c已经使用了
used[2]=false
used[0]=false
path[0]=n[1]
used[1]=true
path[1]=n[0]
used[0]=true
a已经使用了
b已经使用了
path[2]=n[2]
used[2]=true
bac
used[2]=false
used[0]=false
b已经使用了
path[1]=n[2]
used[2]=true
path[2]=n[0]
used[0]=true
bca
used[0]=false
b已经使用了
c已经使用了
used[2]=false
used[1]=false
path[0]=n[2]
used[2]=true
path[1]=n[0]
used[0]=true
a已经使用了
path[2]=n[1]
used[1]=true
cab
used[1]=false
c已经使用了
used[0]=false
path[1]=n[1]
used[1]=true
path[2]=n[0]
used[0]=true
cba
used[0]=false
b已经使用了
c已经使用了
used[1]=false
c已经使用了
used[2]=false