全配列問題のアルゴリズムを求める


//     ,         ,    
/*
     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 <cstdlib>

using namespace std;

void swap(int & a,int & b)
{
    int temp=a;a=b;b=temp;
}

void Perm(int list[],int k,int m)
{
    if(k==m)
    {
        for(int i=0;i<=m;i++)
            cout<<list[i]<<" ";
        cout<<endl;
    }
    else
        for(int j=k;j<=m;j++)
        {
            swap(list[k],list[j]);
            Perm(list,k+1,m);
            swap(list[k],list[j]);
        }
}

int main()
{
    int list[]={1,2,3,4,5,6};
    Perm(list,0,3);
    system("pause");
    return EXIT_SUCCESS;
}

/*
  Perm(list,k,m)          list[0:k-1],    list[k:m]         
*/