递归实现全排列
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);
}
}
}
}
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);
}
}
}
}