输出1-n的全排列
时间: 2023-09-02 11:09:41 浏览: 99
好的,这是一个经典的全排列问题,可以使用递归实现。以下是C++代码实现:
```cpp
#include <iostream>
#include <vector>
using namespace std;
void dfs(vector<int>& nums, vector<bool>& used, vector<int>& path, vector<vector<int>>& res) {
int n = nums.size();
if (path.size() == n) { // 如果当前路径的长度已经等于n,说明已经找到了一组解
res.push_back(path);
return;
}
for (int i = 0; i < n; i++) {
if (!used[i]) { // 如果nums[i]没有被使用过
path.push_back(nums[i]); // 将nums[i]添加到当前路径中
used[i] = true; // 标记nums[i]已经被使用过
dfs(nums, used, path, res); // 递归搜索下一层
path.pop_back(); // 回溯,将nums[i]从当前路径中移除
used[i] = false; // 标记nums[i]未被使用过
}
}
}
vector<vector<int>> permute(int n) {
vector<int> nums(n);
for (int i = 0; i < n; i++) {
nums[i] = i + 1;
}
vector<bool> used(n, false);
vector<int> path;
vector<vector<int>> res;
dfs(nums, used, path, res);
return res;
}
int main() {
int n = 3;
vector<vector<int>> res = permute(n);
for (auto& v : res) {
for (int x : v) {
cout << x << " ";
}
cout << endl;
}
return 0;
}
```
输出结果为:
```
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
```
阅读全文