#include<iostream>
using namespace std;
void Swap(int *a, int *b)
{
int tep = *a;
*a = *b;
*b = tep;
}
bool Isswap(int arr[], int beg, int end)
{
for(int i=beg;i<end;++i)
{
if(arr[i] == arr[end])
{
return false;
}
}
return true;
}
void _Perm(int arr[], int beg, int end)
{
if(arr==NULL)
{
return ;
}
if(beg==end)
{
for(int i=0;i<=end;++i)
{
cout<<arr[i]<<' ';
}
cout<<endl;
}
for(int i=beg; i<=end;++i)
{
Swap(arr+i,arr+beg);
_Perm(arr,beg+1 , end);
Swap(arr+i, arr+beg);
}
}
void Perm(int *arr, int begin, int end )
{
if(arr==NULL)
{
return ;
}
if(begin==end)
{
for(int i=0;i<=end;++i)
{
cout<<arr[i]<<" ";
}
cout<<endl;
}
for(int i=begin; i<=end;++i)
{
if(Isswap(arr , begin, i))
{
Swap(arr+i, arr+begin);
Perm(arr, begin+1, end);
Swap(arr+i, arr+begin);
}
}
}
int main()
{
int arr[] = {1,2,2};
Perm(arr, 0, 2);
cout<<"++++++++++++++++"<<endl;
_Perm(arr, 0,2);
return 0;
}