全排列递归算法c++
时间: 2024-05-25 14:07:37 浏览: 217
全排列是一种常见的组合算法,用于将组元素按照不同的顺序进行排列。下面是一个使用递归算法实现全排列的C++代码示例:
```cpp
#include <iostream>
#include <vector>
using namespace std;
// 交换两个元素的位置
void swap(vector<int>& nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
// 递归生成全排列
void permute(vector<int>& nums, int start, vector<vector<int>>& result) {
if (start == nums.size() - 1) {
result.push_back(nums); // 将当前排列加入结果集
return;
}
for (int i = start; i < nums.size(); i++) {
swap(nums, start, i); // 将第i个元素放到当前位置
permute(nums, start + 1, result); // 递归生成下一位的排列
swap(nums, start, i); // 恢复原始顺序,以便进行下一次交换
}
}
// 全排列函数的入口
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int>> result;
permute(nums, 0, result);
return result;
}
int main() {
vector<int> nums = {1, 2, 3};
vector<vector<int>> result = permute(nums);
// 输出结果
for (const auto& permutation : result) {
for (int num : permutation) {
cout << num << " ";
}
cout << endl;
}
return 0;
}
```
上述代码中,`permute`函数使用递归的方式生成全排列。它通过不断交换当前位置的元素与后面的元素来生成不同的排列。最终,所有的排列都会被存储在`result`中并返回。
阅读全文