#include<bits/stdc++.h>
using namespace std;
bool b[1001];//b表示字母是否被选过
char s[1001],ans[1001];
int len;
void dfs(int i)//递归回溯
{
for(int j=0;j<len;j++)
if(!b[s[j]])//判断是否重复
{b[s[j]]=1;
ans[i]=s[j];
if(i==len-1)
cout<<ans<<endl;//达到长度后输出方案
else dfs(i+1);//搜索下一长度的方案
b[s[j]]=0;//回溯法,退回上一长度重新搜索
}}
int main()
{cin>>s;
len=strlen(s);//len存储字符串长度
dfs(0);//从长度0开始搜索方案
}
全排列
于 2018-02-27 12:57:29 首次发布
