用c++语言实现以下功能:给出 n 个数的有重集合(可以有重复的数),求所有排列,按字典树输出.
时间: 2024-03-29 07:34:10 浏览: 184
以下是用 C++ 实现求有重集合的全排列并按字典序输出的代码:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void dfs(vector<int>& nums, vector<int>& used, vector<int>& path, vector<vector<int>>& res) {
if (path.size() == nums.size()) {
res.push_back(path);
return;
}
for (int i = 0; i < nums.size(); i++) {
if (used[i] || (i > 0 && nums[i] == nums[i-1] && !used[i-1])) {
continue;
}
used[i] = 1;
path.push_back(nums[i]);
dfs(nums, used, path, res);
path.pop_back();
used[i] = 0;
}
}
vector<vector<int>> permuteUnique(vector<int>& nums) {
vector<vector<int>> res;
vector<int> path;
vector<int> used(nums.size(), 0);
sort(nums.begin(), nums.end());
dfs(nums, used, path, res);
return res;
}
int main() {
int n;
cin >> n;
vector<int> nums(n);
for (int i = 0; i < n; i++) {
cin >> nums[i];
}
vector<vector<int>> res = permuteUnique(nums);
for (int i = 0; i < res.size(); i++) {
for (int j = 0; j < res[i].size(); j++) {
cout << res[i][j] << " ";
}
cout << endl;
}
return 0;
}
```
输入格式为:
```
n
a1 a2 ... an
```
其中,n 表示有重集合中元素的个数,a1,a2,...,an 表示这 n 个元素。输出按字典序排列的全排列。
阅读全文