您的位置:首页 > 其它

打印1,2,3,..,n的全排列

2009-03-19 12:37 106 查看
[面试常见题系列] 打印1,2,3,..,n的全排列

思路:递归算法

前0..cur-1位置上已经排好,当前cur位置取一个和前面都不一样的,然后递归处理后面的。

/* 输出1,2,3,..,n的排列数 */

#include <stdio.h>

#include <assert.h>

#include <malloc.h>

void p(int n)

{

extern void _p(int n, int cur, int *a);

int *a;

a = (int *) malloc(n * sizeof(int));

assert(a != NULL);

_p(n, 0, a);

free(a);

}

void _p(int n, int cur, int *a)

{

int i,j;

if (cur == n)

{

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

{

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

}

printf("\n");

return;

}

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

{

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

{

if (a[j] == i)

{

break;

}

}

if (j>=cur)

{

a[cur] = i;

_p(n, cur+1, a);

}

}

}

int main()

{

p(3);

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