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