RQNOJ 34 紧急援救

 

题目描述

话说2007年8月5日,Mike博士神秘失踪了,最后发现是被外星人绑架了,幸好外星人目前还是在地球上活动,并且知道外星人不了解地球,幸好,Milk博士身上有无线信号发送装置,我们终于确定了他的位置,必须赶快到那里去救他。

根据无线信号发送装置,我们确定出一张地图,为了尽快寻找到Mike博士,于是这个光荣和艰巨的任务便交给了你,编写程序,通过使用一张地图帮助研究所确定从研究所出发找到Mike博士最短距离。

数据范围: n<=1000

输入格式

第一行为n

第二行为n*n的地图(其中0表示通路,1表示死路)

最后两行每行有两个数字,分别表示研究所的坐标和博士信号所在的位置。

输出格式

一个数字k,表示从研究所出发找到Milk博士的最短距离。

 

裸宽搜。

BFS队列要开大,开50W拿了80分,悲伤

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<cmath>
 6 using namespace std;
 7 int mp[1100][1100];
 8 bool vis[1100][1100];
 9 char c[1100];
10 int n;
11 int sx,sy,tx,ty;
12 int mx[5]={0,1,0,-1,0},
13     my[5]={0,0,1,0,-1};
14 int BFS(){
15     int hd=1,tl=0;
16     int qx[1000000],qy[1000000],qans[1000000];
17     qx[++tl]=sx;qy[tl]=sy;qans[tl]=0;
18     vis[sx][sy]=1;
19     while(hd<=tl){
20         for(int i=1;i<=4;i++){
21             int nx=mx[i]+qx[hd];
22             int ny=my[i]+qy[hd];
23             if(nx>0 && nx<=n && ny>0 && ny<=n && 
24                 !vis[nx][ny] && !mp[nx][ny]){
25                 vis[nx][ny]=1;    
26                 qx[++tl]=nx;
27                 qy[tl]=ny;
28                 qans[tl]=qans[hd]+1;
29                 if(nx==tx && ny==ty){
30                     return qans[tl];
31                 }
32             }
33         }
34         hd++;
35     }
36 }
37 int main(){
38     scanf("%d",&n);
39     int i,j;
40     for(i=1;i<=n;i++){
41         scanf("%s",c+1);
42         for(j=1;j<=n;j++){
43             mp[i][j]=c[j]-'0';
44         }
45     }
46     scanf("%d%d%d%d",&sx,&sy,&tx,&ty);
47     printf("%d\n",BFS());
48     return 0;
49 }

 

 

 

posted @ 2016-07-13 20:39  SilverNebula  阅读(312)  评论(0编辑  收藏  举报
AmazingCounters.com