全排列C++代码
// 求一个字符串的全排列.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
using namespace std;
typedef struct Node
{
char *str;
struct Node *Next;
}Node,*NodeList;
void Exchange(char &a,char &b)
{
char c=a;
a=b;
b=c;
}
int IsInclude(char *str,char c)
{
for(int i=0;i<strlen(str);i++)
if(str[i]==c)
return true;
return false;
}
int GetNext(char *str,char *chars)
{
for(int i=0;i<strlen(str);i++)
{
if(!IsInclude(chars,str[i]))
return i;
}
return 0;
}
int Find(char *str,char c)
{
for(int i=0;i<strlen(str);i++)
if(str[i]==c)
return i;
return -1;
}
void GetOut(char *str)
{
int len=strlen(str);
NodeList gg=new Node();
gg->str=new char[len];
strcpy(gg->str,str);
gg->Next=NULL;
int strct=1;
char *chars=new char[len];
int chct=0;
Node *end=gg;
for(int i=0;i<len;i++)
{
if(!IsInclude(chars,str[i]))
{
chars[chct++]=str[i];
int ct=strct;
Node *p=gg;
while(ct)
{
for(int j=0;j<len;j++)
{
int pos=Find(p->str,str[i]);
if(p->str[j]!=p->str[pos]&&!IsInclude(chars,p->str[j]))
{
Node *add=new Node();
add->str=new char[len];
strcpy(add->str,str);
Exchange(add->str[j],add->str[pos]);
end->Next=add;
end->Next->Next=NULL;
end=end->Next;
strct++;
}
}
p=p->Next;
ct--;
}
}
}
while(gg)
{
cout<<gg->str<<endl;
gg=gg->Next;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
GetOut("abcc");
return 0;
}