记录编号 201061 评测结果 AAAAAAAAAA
题目名称 [USACO Mar12] 拖拉机 最终得分 100
用户昵称 Gravatarforever 是否通过 通过
代码语言 C++ 运行时间 0.160 s
提交时间 2015-10-29 21:05:28 内存使用 2.03 MiB
显示代码纯文本
#include<cstdio>
#include<queue>
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)<(b)?(a):(b))
using namespace std;
struct node{int x,y,cishu;}st;
int max_x,max_y,Ans=10000010,xa,ya,n;
queue<node>que;
bool vis[1010][1010],Map[1010][1010];
int xi[5]={0,1,-1,0,0};
int yi[5]={0,0,0,-1,1};
void bfs(int x,int y){
	st.x=x; st.y=y; st.cishu=0;que.push(st);
	while(!que.empty()){
		node c=que.front(); que.pop();
		for(int i=1;i<=4;++i){
			st.x=c.x+xi[i]; st.y=c.y+yi[i];st.cishu=c.cishu;
			if(st.x<1||st.x>max_x||st.y<1||st.y>max_y) Ans=Min(Ans,st.cishu);
			if(!vis[st.x][st.y]&&Map[st.x][st.y]&&st.cishu+1<Ans) vis[st.x][st.y]=1,st.cishu++,que.push(st);
			if(!vis[st.x][st.y]&&!Map[st.x][st.y]&&st.cishu<Ans) vis[st.x][st.y]=1,que.push(st);
		}
	}
}
int main(){
     freopen("tractor.in","r",stdin);
	 freopen("tractor.out","w",stdout);
	 scanf("%d%d%d",&n,&xa,&ya);
	 for(int i=1;i<=n;++i){
		int x,y; scanf("%d%d",&x,&y); Map[x][y]=1;
		max_x=Max(max_x,x);max_y=Max(max_y,y);
	 }
	 bfs(xa,ya);
	 printf("%d",Ans);
	 getchar();getchar();
	 return 0;
}