结构
#include<iostream>
#define n 3
using namespace std;
int a[]={1,1,3};
void swaps(int x,int y)
{
int temp=a[x];
a[x]=a[y];
a[y]=temp;
}
int judge(int start)
{
int i;
for(i=start+1;i<n;i++)
if(a[start]==a[i])
return 0;
return 1;
}
void pers(int k,int m)
{
int i;
if(k==m)
{
for(i=0;i<n;i++)
cout<<a[i]<<" ";
cout<<endl;
return ;
}
for(i=k;i<n;i++)
{
if(judge(i))//如果是此位置后有个一样的则不排列,排列了也没用因为换来换去都一样
{
swaps(i,k);//固定此次排列最前边
pers(k+1,m);//开始从此位置往后的每一位全排
swaps(i,k);//因为原来的位置也算一种所以回复原来位置
}
}
}
int main()
{
pers(0,n-1);
return 0;
}