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

代码贴出来吧。。大家看看哪里还可以优化

Posted by yzhw at 2009-04-01 18:25:50 on Problem 1101
In Reply To:一个字,囧。。用了fflush(stdin),RE了20多次,找死错误找不出来,换成getchar() AC。。。 Posted by:yzhw at 2009-04-01 18:19:28
Source Code

Problem: 1101  User: yzhw 
Memory: 428K  Time: 47MS 
Language: G++  Result: Accepted 

Source Code 
# include <iostream>
# include <list>
using namespace std;
struct point
{
	int x;
	int y;
	int level;
};


int w,h;
bool map[80][80];
list<point> refer;

int bfs(int x1,int y1,int x2,int y2)
{
	refer.clear();
	point start;
	start.level=0;
	start.x=x1;
	start.y=y1;
	refer.push_back(start);
	bool used[80][80];
	memset(used,false,sizeof(used));
	while(refer.size()!=0)
	{
		point temp=refer.front();
		refer.pop_front();
		int i;
		for(i=temp.x+1;i<=w+1&&!map[i][temp.y];i++)
		{
			point temp1;
			temp1.level=temp.level+1;
			temp1.x=i;
			temp1.y=temp.y;
			if(used[temp1.x][temp1.y]) continue;
			refer.push_back(temp1);
			used[temp1.x][temp1.y]=true;
		}
		if(i<=w+1&&i==x2&&temp.y==y2) return temp.level+1;
		for(i=temp.x-1;i>=0&&!map[i][temp.y];i--)
		{
			point temp1;
			temp1.level=temp.level+1;
			temp1.x=i;
			temp1.y=temp.y;
			if(used[temp1.x][temp1.y]) continue;
			refer.push_back(temp1);
			used[temp1.x][temp1.y]=true;
		}
		if(i>=0&&i==x2&&temp.y==y2) return temp.level+1;
		for(i=temp.y+1;i<=h+1&&!map[temp.x][i];i++)
		{
			point temp1;
			temp1.level=temp.level+1;
			temp1.y=i;
			temp1.x=temp.x;
			if(used[temp1.x][temp1.y]) continue;
			refer.push_back(temp1);
			used[temp1.x][temp1.y]=true;
		}
		if(i<=h+1&&i==y2&&temp.x==x2) return temp.level+1;
		for(i=temp.y-1;i>=0&&!map[temp.x][i];i--)
		{
			point temp1;
			temp1.level=temp.level+1;
			temp1.y=i;
			temp1.x=temp.x;
			if(used[temp1.x][temp1.y]) continue;
			refer.push_back(temp1);
			used[temp1.x][temp1.y]=true;
		}
		if(i>=0&&i==y2&&temp.x==x2) return temp.level+1;
	}
	return 0;
}
int main()
{
	int count =1;
	while(1)
	{
		scanf("%d %d",&w,&h);
		memset(map,0,sizeof(map));
		if(!w&&!h) break;
		printf("Board #%d:\n",count++);
		for(int i=1;i<=h;i++)
		{
			getchar();
			for(int j=1;j<=w;j++)
			{
				char temp;
				scanf("%c",&temp);
				if(temp=='X') map[j][i]=1;
			}
		}
		int count1=1;
		while(1)
		{
			int x1,x2,y1,y2;
			scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
			if(!x1&&!x2&&!y1&&!y2) break;
			int res;
			if(res=bfs(x1,y1,x2,y2)) printf("Pair %d: %d segments.\n",count1++,res);
			else printf("Pair %d: impossible.\n",count1++);
		}
		printf("\n");
		
	}
	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