用c语言输出N个数的有重复的全排列,包括重复数字的也输出
时间: 2023-06-01 19:04:36 浏览: 193
以下是用C语言编写的输出N个数的有重复的全排列的代码:
```
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 100
int n;
int a[MAX_N], used[MAX_N];
void dfs(int k) {
if (k == n) {
for (int i = 0; i < n; i++) {
printf("%d ", a[i]);
}
printf("\n");
return;
}
for (int i = 0; i < n; i++) {
if (!used[i]) {
used[i] = 1;
a[k] = i + 1;
dfs(k + 1);
used[i] = 0;
}
}
}
int main() {
printf("请输入N:");
scanf("%d", &n);
dfs(0);
return 0;
}
```
解释:
1. 定义了一个常量 `MAX_N` 表示最大的数的数量。
2. 定义了变量 `n` 表示数的数量,数组 `a` 表示当前排列,数组 `used` 表示当前数是否已经被使用过。
3. 定义了函数 `dfs`,它用于深度优先搜索全排列。参数 `k` 表示当前搜索的位置,当 `k` 等于 `n` 时,表示已经搜索到了一个完整的排列,将其输出并返回。
4. 在 `dfs` 函数中,使用循环枚举所有可能的排列。如果当前数没有被使用过,就将它加入当前排列中,并递归搜索下一个位置。搜索完成后,将当前数从排列中移除,以便搜索其他可能的排列。
5. 在主函数中,读取输入的数的数量,然后调用 `dfs` 函数进行搜索。
阅读全文