题目
给定一个长度为 的可包含重复数字的序列,请你求出其所有不重复的全排列。
输入格式
第一行包含整数 。
第二行包含 个整数。
输出格式
输出所有的不同排列,每种排列占一行。
在确定每种排列的输出顺序时,第一个数较小的先输出,第一个数相同时,第二个数较小的先输出,以此类推。
数据范围
,
数组中包含的元素的取值范围
输入样例:
3
1 1 2
输出样例:
1 1 2
1 2 1
2 1 1
题解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| #include <iostream> #include <algorithm>
using namespace std;
const int N = 10;
int n; int a[N], nums[N]; bool st[N];
void dfs(int u) { if (u == n) { for (int i = 0; i < n; ++ i) cout << nums[i] << " "; cout << endl; return; }
for (int i = 0; i < n; ++ i) if (!st[i]) { nums[u] = a[i]; st[i] = true; dfs(u + 1); st[i] = false;
while (i + 1 < n && a[i] == a[i + 1]) ++ i; } }
int main() { cin >> n; for (int i = 0; i < n; ++ i) cin >> a[i]; sort(a, a + n); dfs(0); return 0; }
|