#include <bits/stdc++.h>
using namespace std;
int n,ax,ay,bx,by;
const int dx[]={0,0,1,-1};
const int dy[]={1,-1,0,0};
int a[52][52];
struct pos{
int x,y;
};
vector<pos> v1;
void cc2(){
int vis[51][51];
memset(vis,0,sizeof(vis));
queue<pos>q;
q.push({bx,by});
while(!q.empty()){
int ox=q.front().x,oy=q.front().y;
q.pop();
v1.push_back({ox,oy});
vis[ox][oy]=1;
for(int i=0;i<4;i++){
int nx=ox+dx[i],ny=oy+dy[i];
if(nx<0||nx>=n||ny<0||ny>=n||a[nx][ny]==1||vis[nx][ny])continue;
q.push({nx,ny});
}
}
}
vector<pos> v;
void cc(){
int vis[51][51];
memset(vis,0,sizeof(vis));
queue<pos>q;
q.push({ax,ay});
while(!q.empty()){
int ox=q.front().x,oy=q.front().y;
q.pop();
v.push_back({ox,oy});
vis[ox][oy]=1;
for(int i=0;i<4;i++){
int nx=ox+dx[i],ny=oy+dy[i];
if(nx<0||nx>=n||ny<0||ny>=n||a[nx][ny]==1||vis[nx][ny])continue;
q.push({nx,ny});
}
}
}
int main(){
cin>>n>>ax>>ay>>bx>>by;
ax--,ay--,bx--,by--;
for(int i=0;i<n;i++){
string s;
cin>>s;
for(int j=0;j<n;j++){
a[i][j]=s[j]-'0';
}
}
cc();cc2();
int ans=999999999;
for(int k=0;k<v1.size();k++){
for(int p=0;p<v.size();p++){
ans=min(ans,(v1[k].x-v[p].x)*(v1[k].x-v[p].x)+(v1[k].y-v[p].y)*(v1[k].y-v[p].y));
}
}
cout<<ans<<endl;
}
为什么会MLE理论上最大只会存约10000个int呀