品味工作生活人生,实现自我人生价值,
2014年(5)
分类: C/C++
2014-04-18 19:22:03
全排列递归算法
void swap(int *a,int *b){
int m = *a;*a = *b;*b = m;
}
bool isSwap(int list[],int front,int back)
{
for(int i=front;i
if(list[i] == list[back]){return false;}
}
return true;
}
void perm(int list[],int k,int m)
{
/* 迭代至最后一个k==m,可以直接执行打印,也可以再次执行交换迭代一次,
* 前提自比isSwap返回true;否则会发生两部执行的场景,使得全部迭代全失效 */
if(k>m)
{
for(int i=0;i<=m;i++)
{
printf("%d",list[i]);
}
printf("\n");
}
else
{
for(int i=k;i<=m;i++)
{
/* front==back-->返回True,确保迭代次数(k+1),否则会终点断链; */
if(isSwap(list,k,i))
{
swap(&list[k],&list[i]);
perm(list,k+1,m);
swap(&list[k],&list[i]);
}
}
}
}
int main() {
int list[] = {0,1,2,3};
perm(list,0,3);
return 0;
}