您的位置:首页 > 其它

单词的全排列同时去重复的元素

2014-03-15 15:22 260 查看
主要用到回溯算法,用排列树框架

#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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: