全排列问题算法实现--递归

来源:互联网 发布:c语言中的指针是什么 编辑:程序博客网 时间:2024/05/19 22:48
/*     设R={r1,r2,...rn}是要进行排列的n个元素.Ri=R-{ri}.集合X中元素的全排列记为     Perm(X).(ri)Perm(X)表示在全排列Perm(X)的每一个排列前加上前缀ri得到的排列     R的全排列可归纳定义如下:         当n=1时,Perm(R)=(r),其中r是集合R中唯一的元素;         当r>1时,Perm(R)由(r1)Perm(r1),(r2)Perm(r2).....(rn)Perm(rn)构成.         依此递归定义,Perm(R)的递归算法如下: */#include <iostream>#include <algorithm>using namespace std;int cnt = 0;Perm(int list[],int k,int m){  if(k == m){    cnt++;    cout<<"cnt = "<<cnt<<endl;    for(int i = 0 ; i <= m ; i++){      cout<<list[i]<<"  ";    }    cout<<endl;  }  else{    for(int i = k ; i <= m; i++){      swap(list[k],list[i]);      Perm(list,k+1,m);      swap(list[k],list[i]);    }  }}int main(){  int x[] = {1,2,3,4,5};  cout<<"this is  a test"<<endl;  Perm(x,0,4);}