打印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);
}
思路:递归算法
前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);
}
相关文章推荐
- 打印1~N的全排列(C++)
- 全排列打印
- 全排列打印(二)
- 打印全排列和stl::next_permutation
- 打印N个数的全排列
- Python实现全排列的打印
- 打印字符串的全排列
- 设计算法打印出一串字符的全排列。假设所有的字符都不同。
- 打印字符串的全排列
- 全排列,排大小,打印素数,乘法表
- 打印全排列
- 打印1到最大的n位数:大数问题,全排列实现
- 打印一个数组的全排列
- 打印字符串的全排列
- 面试题12: 打印1到最大的n位数(递归解法,全排列的递归解法)
- 数据结构_递归算法的应用_打印n个数的全排列数
- 全排列打印C++
- C程序:打印1,2,3,..,n的全排列
- 对n个数进行全排列并打印全排列结果
- 回溯法打印全排列[转]