#include<stdio.h>
#include<stdlib.h>
int a[25];
void printf_permutation(int n, int *a, int cur)
{
if (cur == n)//递归边界
{
for (int i = 0; i < n; i++)
{
printf("%d", a[i]);//打印
}
printf("\n");
}
else
{
for (int i = 1; i <= n; i++) //在a[cur]中填1~n
{
int ok = 1;
for (int j = 0; j < cur; j++)
{
if (i == a[j])//如果i已经在a[0]~a[cur-1]中出现过,则不能再选
{
ok = 0;
}
}
if (ok)
{
a[cur] = i;
printf_permutation(n, a, cur + 1);//递归调用
}
}
}
}
int main()
{
int n;
while (scanf("%d", &n) == 1)
{
printf_permutation(n, a, 0);
}
return 0;
}
递归生成1~n的排列
最新推荐文章于 2020-09-18 21:55:45 发布