#include<iostream>
#include<queue>
using namespace std;
const int N=110;
int a[N][N];
int vis[N][N];
int n,m;
int x1,y1,x2,y2;
int p[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
struct node
{
int x,y,step;
};
bool check(int x,int y)
{
if(x<1||x>n||y<1||y>m || vis[x][y] || !a[x][y])
return false;
else
return true;
}
int bfs(int x,int y)
{
queue<node> que;
que.push(node{x,y,0});
vis[x][y]=1;
while(!que.empty())
{
node u=que.front();
que.pop();
if(u.x==x2&&u.y==y2)
{
return u.step;
}
for(int i=0;i<=3;i++)
{
int move1=u.x+p[i][0];
int move2=u.y+p[i][1];
if(!check(move1,move2))
{
continue;
}
vis[move1][move2]=true;
que.push( node{move1,move2,u.step+1} );
}
}
return -1;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
cin>>x1>>y1>>x2>>y2;
cout<<bfs(x1,y1)<<endl;
return 0;
}
问题得到结局。