c++回溯算法全排列问题
时间: 2023-08-03 11:10:52 浏览: 56
全排列问题是回溯算法的经典问题之一,下面是C++实现代码:
```cpp
#include <iostream>
#include <vector>
using namespace std;
void backtrack(vector<int>& nums, int start, vector<vector<int>>& res) {
if (start == nums.size()) { // 当start等于数组长度时,说明已经遍历完整个数组,将当前结果加入到结果集中
res.push_back(nums);
return;
}
for (int i = start; i < nums.size(); i++) {
swap(nums[start], nums[i]); // 交换当前元素和起始元素
backtrack(nums, start + 1, res); // 递归遍历下一个元素
swap(nums[start], nums[i]); // 还原数组
}
}
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int>> res;
backtrack(nums, 0, res);
return res;
}
int main() {
vector<int> nums = {1, 2, 3};
vector<vector<int>> res = permute(nums);
for (auto& row : res) {
for (auto& num : row) {
cout << num << " ";
}
cout << endl;
}
return 0;
}
```
输出结果为:
```
1 2 3
1 3 2
2 1 3
2 3 1
3 2 1
3 1 2
```