|
发表于 2023-10-30 19:29:19
|
显示全部楼层
你需要修改代码,使其能够输出给定数组的全排列。
下面是修改后的代码:
- #include <bits/stdc++.h>
- using namespace std;
- vector<int> a;
- vector<vector<int>> nums;
- void permute(vector<int>& arr, int l, int r) {
- if (l == r) {
- nums.push_back(arr);
- return;
- }
- for (int i = l; i <= r; i++) {
- swap(arr[l], arr[ i]);
- permute(arr, l + 1, r);
- swap(arr[l], arr[ i]);
- }
- }
- int main()
- {
- int n, x;
- cin >> n;
- for (int i = 0; i < n; i++) {
- cin >> x;
- a.push_back(x);
- }
- permute(a, 0, n - 1);
- for (int i = 0; i < nums.size(); i++) {
- for (int j = 0; j < nums[ i].size(); j++) {
- cout << nums[ i][j] << " ";
- }
- cout << endl;
- }
- return 0;
- }
复制代码
这里我们使用了递归的方式来生成给定数组的全排列。 permute 函数接受一个数组 arr ,以及当前要处理的起始位置 l 和结束位置 r 。当 l 等于 r 时,表示已经生成了一个全排列,将其加入到 nums 中。否则,我们从 l 到 r 的位置依次选择一个元素,将其与 l 位置的元素交换,然后递归处理剩余的元素,最后再将交换的元素还原回来。
在 main 函数中,我们读取输入的数组,并调用 permute 函数生成全排列。最后,我们遍历 nums 并输出每个全排列。
希望能帮到你!如果有任何问题,请随时问我。 |
|