c++编写求解全排列问题(问题描述):对于给定的正整数n(n≥1),求1~n的所有全排列。
时间: 2024-09-10 17:07:21 浏览: 55
问题描述:求从1~n的正整数中取出k(k<=n)个不重复整数的所有组合.pdf
要使用C++编写一个程序来求解给定正整数n的所有全排列,我们可以采用回溯法(也称为深度优先搜索算法)来实现。这种方法通过递归地交换元素位置,生成所有可能的排列。下面是一个基于回溯法的C++实现示例:
```cpp
#include <iostream>
#include <vector>
using namespace std;
void swap(int &a, int &b) {
int temp = a;
a = b;
b = temp;
}
void generatePermutations(vector<int> &nums, int start, vector<vector<int>> &result) {
if (start >= nums.size()) {
result.push_back(nums);
return;
}
for (int i = start; i < nums.size(); ++i) {
swap(nums[start], nums[i]);
generatePermutations(nums, start + 1, result);
swap(nums[start], nums[i]); // backtrack
}
}
vector<vector<int>> permute(vector<int> &nums) {
vector<vector<int>> result;
generatePermutations(nums, 0, result);
return result;
}
int main() {
int n;
cout << "请输入正整数n: ";
cin >> n;
vector<int> nums(n);
for (int i = 0; i < n; ++i) {
nums[i] = i + 1;
}
vector<vector<int>> result = permute(nums);
for (const auto &perm : result) {
for (int num : perm) {
cout << num << " ";
}
cout << endl;
}
return 0;
}
```
上述代码首先定义了一个`swap`函数用于交换两个整数的值,然后定义了一个递归函数`generatePermutations`用于生成全排列,最后在`main`函数中读取用户输入的正整数n,并使用`permute`函数生成并打印所有全排列。
阅读全文