题目链接:http://poj.org/problem?id=1731
用dfs求一个字符串全排列,注意去除重复的方法
代码如下:
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
char a[205];
int vis[205],n;
char b[205];
void dfs(int x)
{
int i;
if(x==n)
{
puts(b);
return ;
}
for(i=0;i<n;i++)
{
if(!vis[i])
{
vis[i]=1;
b[x]=a[i];
dfs(x+1);
vis[i]=0;
while(i<n&&a[i]==a[i+1])//回溯的时候如果s[i]和s[i+1]相同,则寻找下一个与s[i+1]不同的数,找到为止,以去除重复的排列
{
i++;
}
}
}
return ;
}
int main()
{
int i;
cin>>a;
memset(vis,0,sizeof(vis));
n=strlen(a);
a[n]='\0';
sort(a,a+n);
dfs(0);
return 0;
}