用c++:全排列问题。设R={r1,r2,r3…rn}是要进行排列的n个元素,请编程列出全部排列情况。例:序列 {1,2,3}的全排列为:
时间: 2024-09-27 09:04:31 浏览: 26
在 C++ 中,解决全排列问题可以采用递归回溯法。下面是一个简单的示例程序来生成给定集合 `R` 的所有全排列:
```cpp
#include <iostream>
#include <vector>
// 排列函数
void permute(std::vector<int>& arr, int start = 0) {
if (start == arr.size()) {
// 当前子数组已经形成一个排列,打印出来
for (int num : arr) {
std::cout << num << " ";
}
std::cout << std::endl;
return;
}
for (int i = start; i < arr.size(); ++i) {
// 将当前元素放在起始位置并继续处理剩余部分
std::swap(arr[start], arr[i]);
permute(arr, start + 1); // 递归调用
// 恢复原状态,回溯一步,将已交换的元素放回原位置
std::swap(arr[start], arr[i]);
}
}
int main() {
int n;
std::cout << "Enter the number of elements: ";
std::cin >> n;
std::vector<int> R(n);
std::cout << "Enter the elements: ";
for (int i = 0; i < n; ++i)
std::cin >> R[i];
std::cout << "Permutations of " << R[0] << ", ..., " << R[n - 1] << ":" << std::endl;
permute(R);
return 0;
}
```
当你运行这个程序并输入序列 `{1, 2, 3}`,它会输出所有的全排列结果,如:
```
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
```
阅读全文