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