//迷宫问题的最短路径
#include <iostream>
using namespace std;
int n, m, p, q, min = (1 << 31) - 1;//地图有m行n列, 需要到(p, q)
int a[51][51]; //0为空地,1为障碍物
bool book[51][51]; //未走过为false,走过为true
void dfs(int x, int y, int step)
{
int next[4][2] = {
{0, 1},
{1, 0},
{0, -1},
{-1, 0},
}; //必须放到函数里面
int tx, ty, k;
if (x == p && y == q) {
//cout << step << endl;
if (step < min) min = step;
return; //这个return很关键
}
for (k = 0; k < 4; k++) {
tx = x + next[k][0];
ty = y + next[k][1]; //下一步的位置
if (tx<1 || tx>n || ty<1 || ty>m)continue;//如果出界换方向
if (a[tx][ty] == 0 && book[tx][ty] == false) {
book[tx][ty] = true; //标记
dfs(tx, ty, step + 1); //递归尝试下一个点
book[tx][ty] = false; //尝试结束,回溯
}
}
return;
}
int main() {
int startx, starty;
cin >> n >> m;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
cin >> a[i][j]; //和24行判断出界方向对应,所以是从1开始
cin >> startx >> starty >> p >> q;
book[startx][starty] = true;//起点已在路径中,防止重复走
dfs(startx, starty, 0);//刚开始一步都没有走
cout << min << endl;
return 0;
}
/*
基本模型
void dfs(int step){
判断边界
for(int i = 0; i<n; i++){//尝试每一种可能
dfs(step + 1);//继续下一步
}
return;
}
*/
/*
5 4
0 0 1 0
0 0 0 0
0 0 1 0
0 1 0 0
0 0 0 1
1 1 4 3
*/