回溯法打印方法介绍
来源:www.45fan.com 2016-09-01 07:26:08
回溯法打印方法介绍
一个全排列的递归算法,非常的简洁,转载自天极网
#include<stdio.h>

voidprint_it(intn,intarr[]);
voidarrange_all(intsize,intarr[],intpos);

intmain()

...{

inta[5]=...{1,2,3,4,5};
arrange_all(5,a,0);
return0;
}

/**//*
函数名:voidarrange_all(intsize,intarr[],intpos)
描述:打印所有排列
参数:
size要排列的数据个数
arr[]排列存放的数组
pos当前排列位置
*/
voidarrange_all(intsize,intarr[],intpos)

...{
inti,tmp;

if(pos+1==size)/**//*如果已经排到最后*/

...{

print_it(size,arr);/**//*打印数组*/
return;
}

for(i=pos;i<size;i++)/**//*对当前位置后的所有位置排列*/

...{

tmp=arr[pos];/**//*交换位置*/
arr[pos]=arr[i];
arr[i]=tmp;

/**//*递归,继续后面的调用*/
arrange_all(size,arr,pos+1);

/**//*在交换回来,保持原有的排列次序*/
tmp=arr[pos];
arr[pos]=arr[i];
arr[i]=tmp;
}
}

voidprint_it(intn,intarr[])

...{
inti;
staticintcnt=0;
printf("%04d: ",++cnt);
for(i=0;i<n;i++)
printf("%2d",arr[i]);
printf(" ");
}
