您的位置:首页 > 其它

C程序:打印1,2,3,..,n的全排列

2010-04-21 09:31 113 查看
/*
思路:递归算法
前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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c 算法 null
相关文章推荐