全排列就是从第一个数字起每个数分别与它后面的数字交换。
void Perm(int list[] , int k ,int m)
{
//list 数组存放排列的数,K表示层 代表第几个数,m表示数组的长度
if(k==m)
{
//K==m 表示到达最后一个数,不能再交换,最终的排列的数需要输出;
for(int i=0 ;i<=m ;i++)
cout<<list[i];
cout<<endl;
}
else{
for(int i=k;i<=m;i++)
//去重的全排列就是从第一个数子起分别与它后面非重复出现的数字交换。
//if(IsSwap(int list[],int k,i))
{
swap(list[i],list[k]);
Perm(list,k+1,m);
swap(list[i] , list[k]);
}
}
/*
bool IsSwap(int list[],int Begin,int End){
for(int i=Begin;i<End;i++){
if(list[i]==list[End]) return false;
return true;
}
}
*/
}