C++使用递归实现带重复的全排列问题。例如:输入{1,3,1}; 输出:{1,3,1},{1,1,3},{3,1,1}
时间: 2024-12-11 15:23:56 浏览: 10
在C++中,可以使用递归算法来解决带重复元素的全排列问题。这里是一个简单的示例,用于生成给定数组的所有排列。这个函数采用了回溯法的思想,对于每个位置,它会尝试将剩余的数字放在当前位置的所有可能性上。
```cpp
#include <iostream>
#include <vector>
void permute(std::vector<int>& nums, int start, std::vector<int>& result) {
if (start == nums.size()) { // 当遍历完所有位置,添加到结果中
result.push_back(nums);
return;
}
for (int i = start; i < nums.size(); ++i) { // 尝试将nums[i]放到每个位置
std::swap(nums[start], nums[i]); // 交换当前位置和待选位置的数
permute(nums, start + 1, result); // 递归处理剩余部分
std::swap(nums[start], nums[i]); // 回溯,恢复原状态,继续尝试下一个位置
}
}
std::vector<std::vector<int>> generatePermutations(const std::vector<int>& input) {
std::vector<std::vector<int>> permutations;
permute(input, 0, permutations);
return permutations;
}
int main() {
std::vector<int> nums = {1, 3, 1};
std::vector<std::vector<int>> results = generatePermutations(nums);
for (const auto& permutation : results) {
for (int num : permutation)
std::cout << num << " ";
std::cout << "\n";
}
return 0;
}
```
运行上述代码,你会得到:
```
1 3 1
1 1 3
3 1 1
```
阅读全文