枚举排列

枚举排列

题目:输入正整数 n ,按照字典序从小到大的顺序的前 n 个数的所有排列。

提示:两个序列字典序关系大小关系等价于从头开始第一个不相同位置大小关系。(即: {1,3,2} < {2,1,3} )


· 生成 1 ~ n 的排列

思考
以 1 开头的排列开始讨论:第一位是 1,后面 2~9 按照字典序排序,2 ~ 9 的排列又符合 :以 2 开头的排列。
(出现了!是你!递归!)

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
using namespace std;


void print_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++)
{
int flag=1;
for(int j=0;j<cur;j++)
{
if(A[j]==i)
flag=0;
}
if(flag)
{
A[cur]=i;
print_permutation(n,A,cur+1);
}

}
}
}

int main()
{
int n;
int A[1024];
while(scanf("%d",&n)==1)
{
print_permutation(n,A,0);
}
return 0;
}

枚举排列
https://yui73.github.io/2020/01/07/枚举排列法/
作者
Yui
发布于
2020年1月7日
许可协议