P1746 10分!
#include <bits/stdc++.h>
using namespace std;
int dx[4]= {1,0,-1,0},dy[4]= {0,1,0,-1};
int n,used[1002][1002];
int X1,Y1,X2,Y2;
int ans=0x7fffffff;
void dfs(int x,int y,int stp) {
if(x==X2&&y==Y2) {
ans=ans>stp?stp:ans;
return;
}
for(int i=0; i<4; i++) {
int nx=x+dx[i],ny=y+dy[i];
if(nx<1||nx>n||ny<1||ny>n) continue;
if(used[nx][ny]==1) continue;
used[nx][ny]=1;
dfs(nx,ny,stp+1);
}
}
int main() {
cin>>n;
memset(used,0,sizeof(used));
for(int i=0;i<=n+1;i++){
used[i][0]=1,used[0][i]=1,used[i][n+1]=1,used[n+1][i]=1;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
char x;
cin>>x;
if(x=='1') used[i][j]=1;
}
}
cin>>X1>>Y1>>X2>>Y2;
if(used[X1][Y1]==1||used[X2][Y2]==1) {
cout<<0<<endl;
return 0;
}
dfs(X1,Y1,0);
cout<<ans<<endl;
return 0;
}