就是在有重复元素的全排列的基础上加一个重复检测机制
//递归回溯法生成无重复元素的全排列
#include<iostream>
using namespace std;
int cnt;
int a[] = { 1,1,1,2};
void f(int k) {
if (k == 4) {//判断是否符合要求
for (int i = 0; i < 4; i++)
cout << a[i];
cout << endl;
return;
}
//表示第k位之前都已经排序完成
for (int i = k; i < 4; i++) {
if (a[i] == a[k]&&i!=k)//重复检测机制
continue;
int temp = a[k];
a[k] = a[i];
a[i] = temp;
f(k + 1);
temp = a[k];
a[k] = a[i];
a[i] = temp;
}
return ;
}
int main() {
f(0);
cout << cnt;
return 0;
}