全排列递归算法

来源:互联网 发布:套路网络用语 编辑:程序博客网 时间:2024/05/17 02:38

递归求全排列算法:


例如:char a[]=”abc”  ,(i,j,k)表示数组现有的元素

perm(a,k,m);//从数组下标km的全排列

k==m 只剩一个元素为递归出口


C++源码:

#include <iostream>using namespace std;/*对数组元素全排列如 a[]="abc";结果为:abcacbbacbcacbacab*/int swap(char a[],int i,int j){//交换数组下标为i和j的元素    char temp;    temp=a[i];    a[i]=a[j];    a[j]=temp;    return 0;}int perm(char a[],int k,int m){    if(k==m)       cout<<a<<endl;    else{        for (int i=k;i<=m ;i++) {            swap(a,k,i);//每个子串的第二个字符起、都分别与第一个字符交换、形成新的a、进行全排列            perm(a,k+1,m);//除第一个字符外剩下的全排列递归            swap(a,k,i);//恢复还原a[]            /* code */        }                  }    return 0;}int main() {    char a[]="abc";    char *p=a;    int length=0;    while(*p!='\0'){        length++;        p++;    }        perm(a,0,length-1);//对数组a[] 从下标0到length-1全排列return 0;}



 

0 0
原创粉丝点击