AcWing 1537. 递归实现排列类型枚举 II
原题链接
简单
作者:
王小强
,
2021-02-06 16:02:02
,
所有人可见
,
阅读 474
递归实现排列类型枚举 II
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n;
void permute(vector<int>& nums, vector<int>& candidates, vector<int>& used) {
if (candidates.size() == n) { // find the solution!
for (const auto& x : candidates) cout << x << ' ';
cout << endl;
}
for (int i = 0; i < n; ++i) {
if (used[i] || (i > 0 && !used[i - 1] && nums[i] == nums[i - 1])) continue;
used[i] = 1;
candidates.emplace_back(nums[i]);
permute(nums, candidates, used);
candidates.pop_back();
used[i] = 0;
}
}
int main(void) {
cin >> n;
vector<int> nums(n);
for (int i = 0; i < n; ++i) cin >> nums[i];
sort(begin(nums), end(nums));
vector<int> used(n, 0);
vector<int> candidates;
permute(nums, candidates, used);
}