阅读量:4
下面是C++中全排列的递归算法的实现:
#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 permuteHelper(vector<int>& nums, int begin, vector<vector<int>>& result) { if (begin == nums.size()) { result.push_back(nums); return; } for (int i = begin; i < nums.size(); i++) { swap(nums, begin, i); permuteHelper(nums, begin + 1, result); swap(nums, begin, i); // 恢复原来的位置,以便进行下一次交换 } } vector<vector<int>> permute(vector<int>& nums) { vector<vector<int>> result; permuteHelper(nums, 0, result); return result; } int main() { vector<int> nums = {1, 2, 3}; vector<vector<int>> result = permute(nums); for (vector<int>& permutation : result) { for (int num : permutation) { cout << num << " "; } cout << endl; } return 0; }
该算法通过递归实现全排列。首先,定义一个permuteHelper
函数,该函数用于生成从指定位置开始的全排列。在遍历过程中,将当前位置的元素与后面的元素逐个交换,并继续递归生成全排列。当遍历到最后一个位置时,将当前排列添加到结果中。
在主函数中,定义一个测试用例nums
,然后调用permute
函数生成全排列,并打印结果。