
package com.itheima.Test;
import java.util.Scanner;
/*
5 4
1 1 2 1
1 1 1 1
1 1 2 1
1 2 1 1
1 1 1 2
1 1 4 3
*/
public class _dfs走迷宫 {
private static int p,q,min=999999;//p,q代表终点坐标
static int[][] map=new int[60][60];//1代表空地,2代表障碍物
static int[][] visit=new int[60][60];//0表示未访问过,1表示访问过
public static void dfs(int x,int y,int step){//x,y是坐标,step是步数
if(x==p&&y==q){//如果到达终点就更新最短路径的值和回溯
if(step<min){
min=step;//更新最短路径
}
return ;//回溯
}
//向右
if(map[x][y+1]==1&&visit[x][y+1]==0){//不是障碍物点并且没有走过
//说明可以走
visit[x][y+1]=1;
dfs(x,y+1,step+1);//向右试探
visit[x][y+1]=0;//每次走完访问标记置为0,以便下次路径的比对
}
//向下
if(map[x+1][y]==1&&visit[x+1][y]==0){
visit[x+1][y]=1;
dfs(x+1,y,step+1);
visit[x+1][y]=0;
}
//向左
if(map[x][y-1]==1&&visit[x][y-1]==0){
visit[x][y-1]=1;
dfs(x,y-1,step+1);
visit[x][y-1]=0;
}
//向上
if(map[x-1][y]==1&&visit[x-1][y]==0){
visit[x-1][y]=1;
dfs(x-1,y,step+1);
visit[x-1][y]=0;
}
return ;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();//行
int n=sc.nextInt();//列
for (int i = 1; i <= m; i++) {
for (int j = 1; j <=n; j++) {
map[i][j]=sc.nextInt();
}
}
int startx=sc.nextInt();//开始坐标
int starty=sc.nextInt();
p=sc.nextInt();//终点坐标
q=sc.nextInt();
visit[startx][starty]=1;//开始的地方访问标记置为1
dfs(startx,starty,0);
System.out.println(min);//输出最短路径
}
}