思路:
这道题是广搜模板题
c o d e code code
#include<iostream>
#include<cstdio>
using namespace std;
int n;
int sx, sy, tx, ty;
int a[2000][2000];
int f[2000000][3];
int dx[4]={1, 0, -1, 0};
int dy[4]={0, 1, 0, -1};
bool v[2000][2000];
void bfs()
{
f[1][1]=sx;
f[1][2]=sy;
f[1][0]=0;
v[sx][sy]=1;
int hd=0, tl=1;
while(hd<tl)
{
hd++;
for(int i=0; i<4; i++)
{
int xx=f[hd][1]+dx[i],
yy=f[hd][2]+dy[i];
if(a[xx][yy]==1||xx<1||xx>n||yy<1||yy>n||v[xx][yy]==1)
continue;
tl++;
f[tl][1]=xx;
f[tl][2]=yy;
f[tl][0]=f[hd][0]+1;
v[xx][yy]=1;
if(xx==tx&&yy==ty)
{
printf("%d", f[tl][0]);
return;
}
}
}
}
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", &sx,&sy,&tx,&ty);
bfs();
return 0;
}