// 40、用1、2、2、3、4、5这六个数字,写一个main函数,打印出所有不同的排列, // 如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连.

//	40、用1、2、2、3、4、5这六个数字,写一个main函数,打印出所有不同的排列,
//	如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连.
void permutation(int a[],int i,int n,int pre)// 我们保留前一个位置的值
{
	if(i==n-1)
	{
		// 验证是否合格
		for(int k=0;k<n;k++)
		{
			if(k==2&&a[k]==4)
			{
				cout<<"error"<<endl;
				system("pause");
			}
			if(k+1<n&&(a[k]==3&&a[k+1]==5||a[k]==5&&a[k+1]==3))
			{
				cout<<"error"<<endl;
				system("Pause");
			}
		}
		for(int k=0;k<n;k++)
		{
			cout<<setw(5)<<a[k];
		}
		cout<<endl;
		// 输出
		return;
	}
	for(int j=i;j<n;j++)
	{
		swap(a[i],a[j]);
		if(i==2&&a[i]==4)
		{
			swap(a[i],a[j]);
			continue;
		}
		if(a[i]==3)
		{
			if(i+1<n&&a[i+1]==5||pre==5)
			{
				swap(a[i],a[j]);
				continue;
			}
			
		}
		if(a[i]==5)
		{
			if(i+1<n&&a[i+1]==3||pre==3)
			{
				swap(a[i],a[j]);
				continue;
			}
		}
		permutation(a,i+1,n,a[i]);
		swap(a[i],a[j]);
	}
}

  

posted on 2013-09-02 20:04  dyc0113  阅读(311)  评论(0编辑  收藏  举报

导航