就是一个字符串的全排列问题,字典序的话,先对字符串排序
注意有重复的字符,所以如果全部输出全排列会有重复的
#include<cstdio>
#include<cstring>
char str[11];
int vis[11];
void dfs(int count,char ss[])
{
int len=strlen(str);
if(count >= len)
{
ss[count] = '\0';
printf("%s\n",ss);
return;
}
for(int i=0;i<len;++i)
{
if(i != 0 && str[i] == str[i-1] && vis[i-1] == 1) //去除重复的
continue;
if(vis[i] == 0)
{
vis[i] = 1;
ss[count] = str[i];
dfs(count+1,ss);
vis[i] = 0;
}
}
}
void sortStr(char ss[])
{
int len=strlen(str);
for(int i=0;i<len;++i)
{
for(int j=i+1;j<len;++j)
{
if(ss[i] > ss[j])
{
char temp;
temp = ss[i];
ss[i] = ss[j];
ss[j] = temp;
}
}
}
}
int main()
{
while(scanf("%s",str) != EOF)
{
memset(vis,0,sizeof(vis));
char ss[11];
sortStr(str);
dfs(0,ss);
}
return 0;
}