1 #include<bits/stdc++.h>
2 using namespace std;
3 int dx[]={0,1,0,-1};
4 int dy[]={1,0,-1,0};
5 struct sj
6 {
7 int x,y,turn;
8 }s,t,p;
9 queue<sj> q;
10 int n,m,c[101][101];
11 bool v[101][101];
12 int main()
13 {
14 cin>>n>>m;
15 for(int i=1;i<=n;i++)
16 for(int j=1;j<=m;j++)
17 cin>>c[i][j];
18 cin>>s.x>>s.y>>t.x>>t.y;
19 q.push(s);
20 memset(v,0,sizeof(v));
21 q.front().turn=0;
22 while(!q.empty())
23 {
24 for(int i=0;i<4;i++)
25 {
26 p.x=q.front().x+dx[i];
27 p.y=q.front().y+dy[i];
28 while(p.x>0&&p.x<=n&&p.y>0&&p.y<=m&&!c[p.x][p.y])
29 {
30 if(!v[p.x][p.y])
31 {
32 if(p.x==t.x&&p.y==t.y)
33 {
34 printf("%d\n",q.front().turn);
35 return 0;
36 }
37 v[p.x][p.y]=1;
38 p.turn=q.front().turn+1;
39 q.push(p);
40 }
41 p.x+=dx[i];
42 p.y+=dy[i];
43 }
44 }
45 q.pop();
46 }
47 return 0;
48 }