用c++写P1706 全排列问题
时间: 2024-05-10 10:21:16 浏览: 156
P1706全排列问题.cpp
下面是一种用C语言实现P1706全排列问题的代码:
```
#include <stdio.h>
#include <stdlib.h>
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
void permute(int *nums, int start, int end) {
if (start == end) {
for (int i = 0; i <= end; i++) {
printf("%d ", nums[i]);
}
printf("\n");
} else {
for (int i = start; i <= end; i++) {
swap(&nums[start], &nums[i]);
permute(nums, start + 1, end);
swap(&nums[start], &nums[i]);
}
}
}
int main() {
int n;
scanf("%d", &n);
int *nums = (int *) malloc(n * sizeof(int));
for (int i = 0; i < n; i++) {
scanf("%d", &nums[i]);
}
permute(nums, 0, n - 1);
free(nums);
return 0;
}
```
该代码实现了递归地生成数组的全排列,并输出到标准输出。函数`swap`用于交换数组中两个元素的位置,函数`permute`用于生成全排列,递归地枚举从`start`位置开始到`end`位置结束的数的排列。在递归调用时,交换`start`位置的数与其之后的每个数的位置,并递归地生成剩余数的排列,最后再将数组恢复原有的顺序。在`main`函数中,先读入数组的长度和元素,然后调用`permute`函数生成全排列并输出,最后释放动态分配的数组内存。
阅读全文