递归实现排列型枚举

递归实现组合型枚举

把 $1∼n$ 这 $n$ 个整数排成一行后随机打乱顺序,输出所有可能的次序。

输入格式

一个整数 $n$

输出格式

按照从小到大的顺序输出所有方案,每行 $1$ 个。

首先,同一行相邻两个数用一个空格隔开。

其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面。

数据范围

$1 ≤ n ≤ 9$

输入样例:

1
3

输出样例:

1
2
3
4
5
6
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

解析

全排列题,没参考性 直接水

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <cstdio>
#include <iostream>
#include <algorithm>

int n;
int arr[10];

int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
arr[i] = i;
}

do {
for (int i = 1; i <= n; i++) {
printf("%d ", arr[i]);
} puts("");
} while(std::next_permutation(arr + 1, arr + 1 + n));

return 0;
}

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!