递归 生成全排列

#include <stdio.h>
#include
<string.h>

int a[20], N;

void fun(int n, int r)
{
int i, j, flag;

if( r == n)
{
for(i = 0; i < n; i++)
printf(
"%d ",a[i]);
puts(
"");
return ;
}
else
{
for (i = 1; i <= n; i++) {
flag
= 1;
for(j = 0; j < r; j++)
if ( i == a[j] )
flag
= 0;
if(flag) {
a[r]
= i;
fun(n, r
+ 1);
}
}

}
}





int main( )
{
while (scanf("%d", &N), N)
{
fun( N,
0);
}
return 0;
}

posted on 2011-08-11 16:58  more think, more gains  阅读(147)  评论(0)    收藏  举报

导航