数组全排列
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool swapAccepted(vector<int> array, int start, int end) //如果后面有重复的数
{
for (int i = start; i < end; ++i)
{
if (array[i] == array[end]) //去重的全排列就是从第一个数字起每个数分别与它后面非重复出现的数字交换,end之前有交换过的重复的
{
return false;
}
}
return true;
}
void FullArray(vector<int> array, size_t array_size, unsigned int index)
{
if (index == array_size)//打印
{
for (unsigned int i = 0; i < array_size; ++i)
{
cout << array[i] << ' ';
}
cout <<endl;
return;
}
for (unsigned int i = index; i < array_size; ++i)//交换
{
if (!swapAccepted(array, index, i))
{
continue;
}
swap(array[i], array[index]);
FullArray(array, array_size, index + 1);
swap(array[i], array[index]);// 用于对之前交换过的数据进行还原
}
}
int main()
{
vector<int> in = { 1,2,3,3 };
FullArray(in, in.size(), 0);
system("pause");
return 0;
}