高级守护
#include<iostream>
using namespace std;
char map[1005][1005];
bool vis[1005][1005];
int dir[5][2]={{0},{1,0},{0,1},{-1,0},{0,-1}};
int n,sx,sy,tx,ty,min1=0x3f3f3f3f,cnt;
void dfs(int x,int y){
if(cnt>=min1){
return;
}
if(x==tx&&y==ty){
min1=min(min1,cnt);
return ;
}
for(int i=1;i<=4;i++){
int dx=x+dir[i][0],dy=y+dir[i][1];
if(dx>=0&&dy>=0&&dx<=n&&dy<=n&&map[dx][dy]=='0'&&!vis[dx][dy]){
cnt++;
vis[dx][dy]=true;
dfs(dx,dy);
vis[dx][dy]=false;
cnt--;
}
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>map[i][j];
}
}
cin>>sx>>sy>>tx>>ty;
vis[sx][sy]=true;
dfs(sx,sy);
cout<<min1<<endl;
return 0;
}