回溯,字符串处理,全排列
Posted 树的种子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了回溯,字符串处理,全排列相关的知识,希望对你有一定的参考价值。
R={r1,r2,r3,...,rn};Perm(R)表示R的全排列
全排列问题,R的全排列递归定义如下:
1、当n=1时, Perm(R)={r};
2、当n>1时, Perm(R)=(r1)Perm(r1),(r2)Perm(r2),...,(rn)Perm(rn);
#include <stdio.h> #include <stdlib.h> #include <algorithm> #include <iostream> #define MAX 105 using namespace std; ///产生元素k~m的全排列,作为前k-1个元素得后缀 void Perm(char a[],int k,int m) { ///构成一次全排列,输出结果 if(k==m) { for(int i=0;i<=m;i++) printf("%c",a[i]); printf("\n"); } else { for(int j=k;j<=m;j++) { swap(a[k],a[j]); Perm(a,k+1,m); swap(a[k],a[j]); } } } int main() { char a[MAX]; int i; scanf("%s",a); for(i=0;i<MAX;i++) if(a[i]==‘\0‘) break; Perm(a,0,i-1); return 0; }
以上是关于回溯,字符串处理,全排列的主要内容,如果未能解决你的问题,请参考以下文章
《程序员面试金典(第6版)》面试题 08.08. 有重复字符串的排列组合(回溯算法,全排列问题)C++