描述
话说2007年8月5日,Mike博士神秘失踪了,最后发现是被外星人绑架了,幸好外星人目前还是在地球上活动,并且知道外星人不了解地球,幸好,Milk博士身上有无线信号发送装置,我们终于确定了他的位置,必须赶快到那里去救他。
根据无线信号发送装置,我们确定出一张地图,为了尽快寻找到Mike博士,于是这个光荣和艰巨的任务便交给了你,编写程序,通过使用一张地图帮助研究所确定从研究所出发找到Mike博士最短距离。
数据范围: n<=1000
格式
INPUT FORMAT:
第一行为n
第二行为n*n的地图(其中0表示通路,1表示死路)
最后两行每行有两个数字,分别表示研究所的坐标和博士信号所在的位置。
OUTPUT FORMAT:
一个数字k,表示从研究所出发找到Milk博士的最短距离。
SAMPLE INPUT
10 0100110100 0001110010 1000000001 1000100011 0000101100 1000001100 1001010011 0000010100 0101010000 1001000001 1 7 10 2
SAMPLE OUTPUT
14
HINTS
#include<bits/stdc++.h>
using namespace std;
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
char ma[1001][1001];
int x1,y11,x2,y2,n;
struct akgfhk{
int x,y,step;
}que[1000001];
void bfs(int xx,int yy){
int head=0,tail=1,x,y,newx,newy;
que[tail].x=xx;
que[tail].y=yy;
ma[xx][yy]='1';
que[tail].step=0;
while(head<tail){
head++;
x=que[head].x;
y=que[head].y;
for(int i=0;i<4;i++){
newx=x+dx[i];
newy=y+dy[i];
if(newx>0&&newx<=n&&newy>0&&newy<n&&ma[newx][newy]=='0'){
tail++;
que[tail].x=newx;
que[tail].y=newy;
que[tail].step=que[head].step+1;
ma[newx][newy]='1';
if(newx==x2&&newy==y2){
cout<<que[tail].step<<endl;
return ;
}
}
}
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)cin>>ma[i];
cin>>x1>>y11;
cin>>x2>>y2;
y11--;
y2--;
bfs(x1,y11);
return 0;
}