字符串全排列

来源:互联网 发布:天刀太白捏脸数据下载 编辑:程序博客网 时间:2024/05/20 20:04

全排列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;}