c++全排列,不用swap函数
时间: 2024-09-25 11:00:23 浏览: 24
在C++中,生成一个序列的所有全排列通常可以使用递归的方式来实现,而不需要直接使用`swap()`函数。这里有一个基本的迭代过程,称为回溯法:
```cpp
#include <iostream>
#include <vector>
// 用于存储当前序列的临时数组
std::vector<int> temp;
void permute(int start, std::vector<int>& nums) {
if (start == nums.size()) { // 当前子序列已完整,打印结果
for (int i : temp) {
std::cout << i << " ";
}
std::cout << "\n";
return;
}
// 对于每个位置,尝试把当前数放进去,然后递归处理剩下的元素
for (int i = start; i < nums.size(); ++i) {
temp[start] = nums[i]; // 将当前元素放到起始位置
permute(start + 1, nums); // 移动到下一个位置并继续递归
}
}
int main() {
std::vector<int> nums = {1, 2, 3};
int n = nums.size();
temp.resize(n);
permute(0, nums);
return 0;
}
```
这个程序首先创建一个临时数组`temp`,然后从第一个位置开始遍历输入序列`nums`,将每个元素放在起始位置,并递归地对剩余的元素进行排列。当所有元素都添加到起始位置后,就得到了一个新的排列,然后回溯到上一个位置,继续尝试其他元素。
阅读全文