去重法全排列

结构

#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;
}

猜你喜欢

转载自blog.csdn.net/oxfff/article/details/88181740