排列算法我们不但关心元素是否选取,还关心选取的顺序。设置数组a[]的记录数组ver[],若a[i]被选则ver[i]=1,否则为0。
n个数中任取一个未被选取的a[i]使得b[0]=a[i],并标记ver[i]=1。然后选取下一个元素b[1]……如果选取的元素个数达到要求就输出数组b。
函数代码如下:
{
int i;
if(k==m)
{
for(i=0;i<m;i++)
printf("%d",b[i]);
printf("\n");
count++;
}
else
{
for(i=0;i<N;i++)
{
if(ver[i]==0) //第i个元素没有被选取
{
b[k]=a[i]; //选取a[i]作为第k个元素
ver[i]=1; //标记选取元素
p(m,k+1); //选取k+1个元素
ver[i]=0; //回溯,继续搜索
}