Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

参考前面的discuss

Posted by frkstyc at 2005-05-31 18:36:55 on Problem 1230
In Reply To:为什么老是worry answer 提示下拉 Posted by:try88 at 2005-05-31 18:35:07
> 
> #include<stdio.h>
> #include<malloc.h>
> #include<stdlib.h>
> 
> typedef struct _WALLS
> {
> 	int nStartx;
> 	int nStarty;
> 	
> 	int nEndx;
> 	int nEndy;
> }WALLS;
> 
> 
> void Zeros(int **a,int nRow,int nColumn)
> {
> 	int n,m;
> 	for(n=0;n<=nRow;n++)		/*m为列,即是x轴*/
> 	{
> 		for(m=0;m<=nColumn;m++)	/*n为行,即是y轴*/
> 		{
> 			a[n][m]=0;
> 		}
> 	}
> }
> 
> 
> int PointInWhichWalls(WALLS *pWalls,int nWalls ,int n,int m)
> {
> 	int i;
> 	for(i=0;i<nWalls;i++)
> 	{
> 		if( pWalls[i].nStartx<=m && m<=pWalls[i].nEndx && n==pWalls[i].nStarty)
> 			return i;
> 	}
> 	return 0;
> }
> 
> 
> int GetBadWallIndex(int *pnBadWall,int nWalls,WALLS *pWalls)
> {
> 	int max=0;
> 	int i;
> 	int mm=0;
> 	for(i=0;i<nWalls;i++)
> 	{
> 		if (pnBadWall[i]>max)
> 		{
> 			max=pnBadWall[i];
> 			mm=i;
> 		}
> 	}
> 	
> 	for(i=0;i<nWalls;i++)
> 	{
> 		if (pnBadWall[i]==max)
> 		{
> 			if( (pWalls[i].nEndx-pWalls[i].nStartx) > (pWalls[mm].nEndx-pWalls[mm].nStartx) ) 
> 				mm=i;
> 		}
> 	}
> 	
> 	return mm;
> }
> 
> 
> int main()
> {
> 
> 	int i,j;
> 	int n,m;
> 
> 	int tmp;
> 
> 	int **a;
> 	int k;
> 	int nTime;
> 	int nWalls;
> 	WALLS *pWalls;
> 	int *pnBadWall;
> 	
> 	/* int *pnResult; */
> 
> 	int nMaxColumn=0;
> 	int nMaxRow=0;
> 
> 	int nColumnCount=0;
> 	int nDesWall;
> 	int flag=0;
> 
> 	int nResult=0;
> 	
> 	
> 	/* 输入循环次数 */	
> 	scanf("%d",&nTime);
> /*	pnResult=(int *)malloc(sizeof(int)*nTime); 
> 	for(i=0;i<nTime;i++)
> 	{
> 		pnResult[i]=0;
> 	}
> */
> 	for(i=0;i<nTime;i++)
> 	{
> 		scanf("%d %d",&nWalls,&k);
> 
> 		pWalls=(WALLS *)malloc(sizeof(WALLS)*nWalls);
> 		pnBadWall=(int *)malloc(sizeof(int)*nWalls);
> 
> 		/* 输入围墙 */
> 		for(j=0;j<nWalls;j++)
> 		{
> 			scanf("%d %d %d %d",
> 				&pWalls[j].nStartx,
> 				&pWalls[j].nStarty,
> 				&pWalls[j].nEndx,
> 				&pWalls[j].nEndy);
> 			
> 			if(pWalls[j].nStartx > pWalls[j].nEndx)
> 			{
> 				tmp=pWalls[j].nStartx;
> 				pWalls[j].nStartx=pWalls[j].nEndx;
> 				pWalls[j].nEndx=tmp;
> 			}
> 
> 			/* 取出墙的最大列和行 */
> 			if(pWalls[j].nEndx>nMaxColumn)
> 				nMaxColumn=pWalls[j].nEndx;
> 
> 			if(pWalls[j].nStarty>nMaxRow)
> 				nMaxRow=pWalls[j].nStarty;
> 
> 			pnBadWall[j]=0;
> 		}
> 		
> 		/* 动态构造平面图 */
> 		a=(int **)malloc(sizeof(int *)*(nMaxRow+1));
> 		for(j=0;j<=nMaxRow;j++)
> 		{
> 			a[j]=(int *)malloc(sizeof(int)*(nMaxColumn+1));
> 		}
> 		/* 初始化平面图为0 */
> 		Zeros(a, nMaxRow, nMaxColumn);
> 		
> 		/* 在平面图上建墙 */
> 		for(j=0;j<nWalls;j++)
> 		{
> 			for(m=pWalls[j].nStartx;m<=pWalls[j].nEndx;m++)
> 			{
> 				a[pWalls[j].nStarty][m]=1;
> 			}
> 		}
> 
> 		do 
> 		{			
> 			flag=0;
> 
> 			/*-------------------------------------------
> 			 查看打印值 
> 			printf("\n-------------------\n");
> 			for(n=0;n<=nMaxRow;n++)
> 			{
> 				for(m=0;m<=nMaxColumn;m++)
> 				{
> 					printf("%d ",a[n][m]);
> 				}
> 				printf("\n");
> 			}
> 			-------------------------------------------*/
> 			
> 			/* 逐列循环扫面墙数 */
> 			for(m=0;m<=nMaxColumn;m++)
> 			{
> 				nColumnCount=0;
> 				for(n=0;n<=nMaxRow;n++)
> 				{
> 					if(a[n][m]==1)
> 						nColumnCount++;
> 				}
> 				
> 				/* 如墙数大于传墙能力k */
> 				if(nColumnCount>k)
> 				{
> 					/* 记录下次要循环再扫描 */
> 					flag=1;
> 
> 					for(n=0;n<=nMaxRow;n++)
> 					{
> 						if(a[n][m]==1)
> 						{
> 							/* 找出墙点所在的墙块 */
> 							/* 记录撞墙的次数的数组++ */
> 							nDesWall=PointInWhichWalls(pWalls,nWalls,n,m);
> 							pnBadWall[nDesWall]++;
> 						}
> 					}				
> 				}
> 				else if(flag!=1)
> 				{
> 					flag=0;
> 				}
> 			}
> 
> 			if(flag==1)
> 			{
> 				/* 找出被撞的最多的那块墙 */
> 				nDesWall=GetBadWallIndex(pnBadWall,nWalls,pWalls);
> 				
> 				/* 在平面图上把墙去掉 */
> 				for(m=pWalls[nDesWall].nStartx; m<=pWalls[nDesWall].nEndx; m++)
>                 {
> 					a[ pWalls[nDesWall].nStarty ][m]=0;
> 				}
> 				
> 				/* 记录撞墙的数组重新初始化为0 */
> 				for(j=0;j<nWalls;j++)
> 				{
> 					pnBadWall[j]=0;
> 				}
> 
> 				nResult++;
> 				/*pnResult[i]++;*/
> 			}		
> 		
> 		} while(flag);
> 
> 		printf("%d\n",nResult); 
> 
> 		nResult=0;
> 		
> 		Zeros(a, nMaxRow, nMaxColumn);
> 		free(pWalls);
> 		free(pnBadWall);
> 		
> 		for(j=0;j<=nMaxRow;j++)
> 		{
> 			free(a[j]);
> 		}
> 		free(a);
> 	}
> 	
> 	/*
> 	for(i=0;i<nTime;i++)
> 	{
> 		printf("%d\n",pnResult[i]);
> 	}
> 	free(pnResult);*/
> 
> 	return 0;
> }

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator