利用链表保存结果,去除重复的串。
#include <iostream>
#include <string.h>
using namespace std;
#include <iostream>
using namespace std;
typedef struct LNode{
char data[10];
LNode* next;
}*List;
void InsertList(List &l, char data[])
{
LNode *p=new LNode;
strcpy(p->data,data);
if(NULL==l)
p->next=NULL;
else
p->next=l;
l=p;
}
void Print(List l)
{
LNode *p=l;
while(p)
{
cout<<p->data<<endl;
p=p->next;
}
}
bool isContain(List l, char data[])
{
LNode *p=l;
while(p && strcmp(p->data,data)!=0 )
p=p->next;
if(!p)
return false;
else
return true;
}
List l=NULL;
void Backtrack(char str[], char out[], int length, int curr, int start)//全组合
{
for(int i=start; i<length; i++)
{
out[curr]=str[i];
out[curr+1]='\0';
// cout<<out<<endl;
if(!isContain(l, out))//判断是否包含此种结果,不包含则插入链表
InsertList(l, out);
if(i<length-1)
Backtrack(str, out, length, curr+1, i+1);
}
}
void main()
{
char str[]="1223";
char *out=new char[strlen(str)+1];
Backtrack(str, out, strlen(str), 0, 0);
Print(l);
}