xyz全排列

来源:互联网 发布:韩文输入法软件 编辑:程序博客网 时间:2024/04/29 03:10

 给定一个字符串,其含有的字符各不相同。程序输出该字符串的所有排列(全排列)情形。例如:给定字符串“xyz”,则程序输出:

xyz

xzy

yxz

yzx

zyx

zxy

 

 

代码:(法一)

#include <iostream>#include <stdio.h>using namespace std;void f(char *str, int len, int n){   int i;   char tmp;   char *p = (char *)malloc( sizeof(char)*len );   if(n==len-1){   printf("%s\n",str);   }else{   for(i=n;i<len;i++){   strcpy(p,str);   tmp = *(str+n);   *(str+n) = *(str+i);   *(str+i) = tmp;    f(str,len,n+1);   strcpy(str,p);   }   }   free(p);   }   int main(int argc, char **argv){   char str[] = "xyz";   f(str,3,0);   printf("\n");      system("pause"); return 0; } 

代码:(法二)

递归回溯:

#include <iostream>using namespace std; bool b[100]; char c[100]; char a[100];int DFS(int n,int cur){    if(cur>=n)  {cout<<c<<endl; return 1;}    for(int i=0;i<n;i++)    if(b[i]==0)     {        b[i]=1;        c[cur]=a[i];        DFS(n,cur+1);        b[i]=0;    }         }int main(){        int len,cur=0;   // cin>>a;   scanf("%s",a);    len=strlen(a);    DFS(len,cur);    system("pause");    return 0;    }


 


 

原创粉丝点击