用栈写全排列,不用递归C++代码
时间: 2024-11-05 07:06:58 浏览: 9
在C++中,使用栈(Stack)数据结构来生成所有可能的全排列是通过迭代而不是递归来实现的。这种方法称为回溯法或深度优先搜索(Depth-First Search)。以下是一个简单的例子:
```cpp
#include <iostream>
#include <stack>
#include <vector>
// 排列函数
std::vector<std::vector<int>> permute(std::vector<int>& nums, int start = 0) {
std::vector<std::vector<int>> result;
if (start == nums.size()) {
result.push_back(nums);
} else {
for (int i = start; i < nums.size(); ++i) {
// 将当前元素交换到起始位置
std::swap(nums[start], nums[i]);
// 继续对剩余元素进行排列
permute(nums, start + 1);
// 恢复原状态(即回溯)
std::swap(nums[start], nums[i]);
}
}
return result;
}
int main() {
std::vector<int> nums = {1, 2, 3};
std::vector<std::vector<int>> permutations = permute(nums);
for (const auto& permutation : permutations) {
for (int num : permutation) {
std::cout << num << " ";
}
std::cout << "\n";
}
return 0;
}
```
在这个代码中,`permute` 函数接收一个整数向量和一个起点 `start`,然后从该点开始逐个尝试将每个元素放到数组的第一个位置,形成新的子序列。如果到达了数组末尾(即 `start == nums.size()`),就将当前的子序列添加到结果列表中。然后会回溯到上一步,恢复之前的状态(通过交换元素),继续尝试其他排列。
阅读全文