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

来源:互联网 发布:网上送花怎么送 知乎 编辑:程序博客网 时间:2024/05/17 10:07

主要用到回溯算法,用排列树框架

#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;
}
0 0
原创粉丝点击