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

2157谁能帮我看一下啊,谢谢大牛们,做了老长时间了

Posted by caonimama at 2007-08-23 09:46:36
#include<iostream.h>
struct node
{
	int x,y;
}start[420],door[5];
int mark[25][25],temp[25][25];
int move[4][2]={{0,-1},{1,0},{0,1},{-1,0}};
int i,j,h,w,ex,ey,key[5],sum[5],f,xx,yy,flag,tang,sx,sy;
char ch,map[25][25];
void input()
{
	int i,j;
	tang=0;
	for(i=0;i<5;i++)
	{
		key[i]=0;
		sum[i]=0;
	}
	for(i=0;i<25;i++)
	{
		for(j=0;j<25;j++)
		{
			temp[i][j]=mark[i][j]=1;
		}
	}
	for(i=0;i<h;i++)
	{
		for(j=0;j<w;j++)
		{
			cin>>ch;
			map[i][j]=ch;
			if(ch=='S')
			{
				start[0].x=i;
				start[0].y=j;
			}
			if(ch>='a'&&ch<='e')
			{
				key[ch-'a']++;
				temp[i][j]=mark[i][j]=0;
			}
			if(ch>='A'&&ch<='E')
			{
				tang++;
				door[ch-'A'].x=i;
				door[ch-'A'].y=j;
			}
			if(ch=='G')
			{
				ex=i;
				ey=j;
				temp[i][j]=mark[i][j]=0;
			}
			if(ch=='.')
			{
				temp[i][j]=mark[i][j]=0;
			}
		}
	}
}
void bfs(int s,int t)
{
	while(s<=t)
	{
		f=t;
		while(s<=f)
		{
			for(int i=0;i<4;i++)
			{
				xx=start[s].x+move[i][0];
				yy=start[s].y+move[i][1];
				if(mark[xx][yy]==0)
				{
					if(map[xx][yy]>='a'&&map[xx][yy]<='e')
					{
						sum[map[xx][yy]-'a']++;
					}
					t++;
					start[t].x=xx;
					start[t].y=yy;
					mark[xx][yy]=1;
				}
			}
			s++;
		}
	}
}
void bfs2(int s,int t)
{
	while(s<=t)
	{
		f=t;
		while(s<=f)
		{
			for(int i=0;i<4;i++)
			{
				xx=start[s].x+move[i][0];
				yy=start[s].y+move[i][1];
				if(mark[xx][yy]==0)
				{
					t++;
					start[t].x=xx;
					start[t].y=yy;
					mark[xx][yy]=1;
					if((xx==ex)&&(yy==ey))
					{
						flag=1;
		        		return;
					}
				}
			}
			s++;
		}
	}
}
void huifu()
{
	int i,j;
	for(i=0;i<h;i++)
	{
		for(j=0;j<w;j++)
		{
			mark[i][j]=temp[i][j];
		}
	}
}
void check()
{
	int i;
	for(i=0;i<5;i++)
	{
		if((sum[i]==key[i])&&(sum[i]!=0)&&(sum[j]!=0))
		{
		//	cout<<char('a'+i)<<":"<<sum[i]<<endl;
			temp[door[i].x][door[i].y]=0;
			mark[door[i].x][door[i].y]=0;
		}
	}
	for(i=0;i<5;i++)
	{
		sum[i]=0;
	}
}
int main()
{
	cin>>h>>w;
	while(h!=0&&w!=0)
	{
	    flag=0;
		input();
		for(int iii=0;iii<tang;iii++)
		{
			bfs(0,0);
			huifu();
			check();
		}		
		bfs2(0,0);
		if(flag==1)
		{ 
			cout<<"YES"<<endl;
			flag=0;			
		}
		else
		{
			cout<<"NO"<<endl;
		}
		cin>>h>>w;
	}
	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