您的位置:首页 > 其它

递归实现全排列

2014-08-14 21:23 204 查看
#include<stdio.h>

int main()

{

void print(int n,int a[],int cur);

int n,a[1000];

int cur;

cur=0;

while(scanf("%d",&n)&&n)

{

cur=0;//cur从0开始

print(n,a,cur);

}

return 0;

}

void print(int n,int a[],int cur)//cur是a数组中当前元素的位置指针(下标)

{

int i,j;

if(cur==n)

{

for(i=0;i<n;i++)

printf("%d ",a[i]);

printf("\n");

}

else

{

for(i=1;i<=n;i++)

{

int ok=1;

for(j=0;j<cur;j++)

if(a[j]==i)

{ ok=0; break; }

if(ok)

{

a[cur] = i;///这里应该这么理解,求4的全排列时,当i等于4时,cur才等于3(下标),

///所以进入下一个递归调用后,cur就等于n了,就会输出数组a中的元素

print(n,a,cur+1);

}

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: