主要用到回溯算法,用排列树框架
#include<iostream>
#include<stdlib.h>using namespace std;
char test[200][20];
//int n;
int count1;
inline void swap(char *s,char *t){
char temp;
temp=*s;
*s=*t;
*t=temp;
}
void dfs(int t,char *c,int n){
if(t==(n)){
//输出单词
c[t]='\0';
int i=0;
for(;i<count1;i++){
if(strcmp(c,test[i])==0)
break;
}
if(i==count1){
strcpy(test[count1++],c);
cout<<c<<endl;
}
//c[0]='\0';
return ;
}
else
{
//产生前缀
for(int i=t;i<n;i++){
swap(&c[t],&c[i]);
dfs(t+1,c,n);
//回溯
swap(&c[t],&c[i]);
}
}
}
int main(){
char word[20];
cin>>word;
int n;
//memset(test)
char temp[20];
n=strlen(word);
cout<<endl<<endl;
//cout<<n;
strcpy(temp,word);
dfs(0,temp,n);
cout<<count1;
return 0;
}