记录编号 |
201061 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[USACO Mar12] 拖拉机 |
最终得分 |
100 |
用户昵称 |
forever |
是否通过 |
通过 |
代码语言 |
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;
}