Problem1774--营救

1774: 营救

Time Limit: 1.000 Sec  Memory Limit: 128 MB
Submit: 581  Solved: 145
[Submit] [Status] [Web Board] [Creator:]

Description

铁塔尼号遇险了!他发出了求救信号。距离最近的哥伦比亚号收到了讯息,时间就是生命,必须尽快赶到那里。
通过侦测,哥伦比亚号获取了一张海洋图。这张图将海洋部分分化成n*n个比较小的单位,其中用1标明的是陆地,用0标明是海洋。船只能从一个格子,移到相邻的四个格子。
为了尽快赶到出事地点,哥伦比亚号最少需要走多远的距离。



Input

第一行为n,下面是一个n*n01矩阵,表示海洋地图
最后一行为四个小于n的整数,分别表示哥伦比亚号和铁塔尼号的位置。

Output

哥伦比亚号到铁塔尼号的最短距离,答案精确到整数。

Sample Input

3
001
101
100
1 1 3 3

Sample Output

4

HINT

【数据范围】
N<=1000
#include<bits/stdc++.h>
usingnamespacestd;
inta[1005][1005],ans;
intdx[4]={0,0,-1,1};
intdy[4]={1,-1,0,0};
intq1[1000005],q2[1000005];
intb[1005][1005],n,h,t=1;
intxx,yy,x,y,x11,y11;
string s;
intmain(){
    cin>>n;
    for(inti=1;i<=n;i++){
        cin>>s;
        for(intj=0;j<n;j++)
          if(s[j]=='1')
            a[i][j+1]=1;
    }
    cin>>x>>y>>x11>>y11;
    if(x==x11&&y==y11){
        cout<<0;
        return0;
    }
    q1[1]=x;
    q2[1]=y;
    a[x][y]=1;
    while(h<t){
        h++;
        for(inti=0;i<4;i++){
            xx=q1[h]+dx[i];
            yy=q2[h]+dy[i];
            if(xx>0&&xx<=n&&yy>0&&yy<=n&&a[xx][yy]==0){
                t++;
                a[xx][yy]=1;
                q1[t]=xx;
                q2[t]=yy;
                b[xx][yy]=b[q1[h]][q2[h]]+1;
                if(xx==x11&&yy==y11){
                    cout<<b[xx][yy];
                    return0;
                }                 
            }                           
        }                                          
    }
    return0;
}


Source/Category


[Submit] [Status]