???求纰漏
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
const int N=1e3+5;
int n;
int a[N][N];
int x1,y1,x2,y2;
bool flag[N][N];
struct Node{
int x,y,cnt;
};
queue<Node> q;
int dx[]={-1,0,1,0},dy[]={0,1,0,-1};
bool check(int x,int y){
return (x>0&&y>0&&x<=n&&y<=n&&!flag[x][y]&&!a[x][y])?true:false;
}
int bfs(int x,int y){
q.push((Node){x,y,1});
while(!q.empty()){
Node u=q.front();
q.pop();
for(int i=0;i<4;i++){
Node e;
e.x=u.x+dx[i],e.y=u.y+dy[i];
if(check(e.x,e.y)){
if(e.x==x2&&e.y==y2) return e.cnt-1;
flag[e.x][e.y]=true;
e.cnt=u.cnt+1;
q.push(e);
}
}
}
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
scanf("%1d",&a[i][j]);
}
}
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
printf("%d\n",bfs(x1,y1));
return 0;
}