降序优先的全排列C++代码
时间: 2024-10-24 14:01:03 浏览: 11
在C++中,生成一个元素按降序排列的全排列数组可以使用递归回溯法。由于题目要求降序,我们需要在遍历过程中保持元素的降序顺序,这里是一个简单的示例:
```cpp
#include <iostream>
#include <vector>
std::vector<int> permutation(std::vector<int>& nums, int start = 0) {
if (start == nums.size()) {
std::reverse(nums.begin(), nums.end());
return {nums};
}
std::vector<std::vector<int>> result;
for (int i = start; i >= 0; --i) {
// 将当前元素放在第一位
std::swap(nums[start], nums[i]);
// 递归获取剩余部分的排列
auto sub_permutations = permutation(nums, start + 1);
// 将当前元素放回原位,并添加到结果中
for (auto& p : sub_permutations) {
p.insert(p.begin(), nums[i]);
result.push_back(p);
}
}
return result;
}
int main() {
std::vector<int> nums = {5, 3, 2, 4, 1}; // 示例输入,你可以替换为你需要的数字
std::vector<std::vector<int>> permutations = permutation(nums);
for (const auto& perm : permutations) {
for (int num : perm) {
std::cout << num << " ";
}
std::cout << "\n";
}
return 0;
}
```
这个函数首先检查是否已经到达排列的结束(即所有元素都已处理),如果到达,则对序列进行反转,得到一个降序排列。然后对于每个未处理的位置,将当前位置的元素放置在首位,递归地获取其余位置的所有排列,并将结果存入`result`。最后返回所有的排列。
阅读全文