从键盘读入n个整数(每个数都是1~9之间的数),输出这n个整数的全排列(数字不能重复)c++
时间: 2024-06-09 15:09:42 浏览: 103
可以使用递归来实现全排列。具体步骤如下:
1. 定义一个数组用来存放每个数字是否已经使用过,初值都为0。
2. 定义一个数组用来存放当前已经选择的数字。
3. 递归函数的参数为当前已经选择的数字个数,以及数组用来存放已选择数字的下标。
4. 当已选择数字个数等于n时,输出这个排列。
5. 否则遍历每个数字,如果这个数字还没有使用过,那么将其放入已选择数组中,将对应的使用标记设为1,并递归调用函数。递归返回后需要将已选择数组中的数字和使用标记恢复为原始值。
以下是实现代码:
```python
#include <stdio.h>
#include <stdlib.h>
#define MAXN 10
int used[MAXN]; // 标记每个数字是否已经使用过
int perm[MAXN]; // 存放当前已经选择的数字
// 递归函数,参数为当前已经选择的数字个数和数组用来存放已选择数字的下标
void dfs(int n, int cur)
{
if (cur == n) { // 如果已选择数字个数等于n,输出排列
for (int i = 0; i < n; i++) {
printf("%d ", perm[i]);
}
printf("\n");
return;
}
for (int i = 1; i <= n; i++) {
if (!used[i]) { // 如果这个数字还没有使用过
perm[cur] = i; // 放入已选择数组中
used[i] = 1; // 标记为已使用
dfs(n, cur+1); // 递归调用
used[i] = 0; // 恢复为未使用
}
}
}
int main()
{
int n;
scanf("%d", &n);
dfs(n, 0);
return 0;
}
```
输入示例:
```
3
```
输出示例:
```
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
```
阅读全文