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; }