现在有一个 的地图,问从起点(sx,sy) 到(tx,ty)
最少要走几步。 输入格式
第一行一个正整数。
接下来 n行,每行n个字符表示的矩阵,1表示不能通过, 0表示可以通过。
最后一行四个整数
。
输出格式
仅有一个数,表示答案。 样例 样例输入
5
01111
00111
10001
11101
11100
1 1 5 5
样例输出
8
#include<bits/stdc++.h>
using namespace std;
int n,sx,sy,tx,ty;
char a[1050][1050];
int walk[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int vis[1050][1050];
struct node{
int x,y,tot;
};
queue<node>q;
bool cmp(int a,int b){
return a>=1&&a<=n&&b>=1&&b<=n;
}
int main(){
// memset(vis,-1,sizeof(vis));
scanf("%d",&n);
string nm;
getline(cin,nm);
for(int i=1;i<=n;i++){
string st="";
getline(cin,st);
for(int j=1;j<=n;j++)
a[i][j]=st[j-1];
}
scanf("%d%d%d%d",&sx,&sy,&tx,&ty);
// for(int i=1;i<=n;i++){
// for(int j=1;j<=n;j++)
// cout<<a[i][j];
// cout<<endl;
// }
q.push((node){sx,sy,0});
vis[sx][sy]=1;
while(!q.empty()){
node now=q.front();
q.pop();
int nx=now.x,ny=now.y,s=now.tot;
// if(a[nx][ny]=='1') continue;
// cout<<nx<<' '<<ny<<' '<<s<<endl;
if(nx==tx&&ny==ty){
cout<<s;
return 0;
}
for(int i=0;i<4;i++){
int dx=nx+walk[i][0],dy=ny+walk[i][1];
// cout<<nx<<' '<<ny<<endl;
if(cmp(dx,dy)&&a[dx][dx]!='1'&&vis[dx][dy]==0){
vis[dx][dy]=1;
q.push((node){dx,dy,s+1});
}
}
}
cout<<-1;
return 0;
}