全排列遞迴演算法
阿新 • • 發佈:2018-11-07
遞迴求全排列演算法:
例如:char a[]=”abc” ,(i,j,k)表示陣列現有的元素
perm(a,k,m);//從陣列下標k到m的全排列
k==m 只剩一個元素為遞迴出口
C++原始碼:
#include <iostream> using namespace std; /*對陣列元素全排列 如 a[]="abc"; 結果為: abc acb bac bca cba cab */ 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; }