hdu 1716 排列2


http://acm.hdu.edu.cn/showproblem.php?pid=1716

坑爹的格式,害了我调了好几个小时!你妹!

这道题就是可重集的排列问题,利用递归求解,类似的详见算法竞赛入门经典118页!~~

#include <iostream>
#include <algorithm>
using namespace std;
int flag,flag_fir;
void print_permutation(int n,int *P,int *A,int cur){
	int i,j;
	if(cur==n){
		if(A[0]){				
			if(A[0]!=flag){	
				if(!flag_fir)		
					cout<<endl;
				flag_fir=0; 
				flag=A[0];
			}
			else cout<<" ";		
			for(i=0;i<n;i++) 
			cout<<A[i];
		}
	}
	else for(i=0;i<n;i++)
		if(!i||P[i]!=P[i-1]){
		int c1=0,c2=0;
		for(j=0;j<cur;j++) if(A[j]==P[i]) c1++;
		for(j=0;j<n;j++) if(P[j]==P[i]) c2++;
		if(c1<c2){
			A[cur]=P[i];
			print_permutation(n,P,A,cur+1);
		}
	}
}
int main()
{
	int n,A[4],cur;
	int P[4];
	int flag_shit=1;//这道题格式太shit了!!! 
	int S[1000][4];
	int i;
	for(i=0;;i++){
		cin>>S[i][0]>>S[i][1]>>S[i][2]>>S[i][3];
		if(!(S[i][0]||S[i][1]||S[i][2]||S[i][3]))
		break;
	}
	for(int k=0;k<i;k++)
 	{
		P[0]=S[k][0];
	 	P[1]=S[k][1];
		P[2]=S[k][2];
		P[3]=S[k][3];
 		flag=-1;
 		flag_fir=1;
	 	sort(P,P+4);	
		cur=0;
		print_permutation(4,P,A,cur);
		cout<<endl;	
		if(k!=i-1) cout<<endl;
	 }
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值