import java.util.*;
public class Main {
static Scanner in = new Scanner(System.in);
static int[][] bool= new int[50][50];
static int[][] maze= new int[50][50];
static int min=Integer.MAX_VALUE;
static int p,q,n,m;
//方向
static int[][] dir= {
{0,1},//右
{1,0},//下
{0,-1},//左
{-1,0}//上
};
static void dfs(int x,int y,int step){
if(x==p&&y==q){
if(step<min)
min=step; //更新最小路径
return;
}
int tx=0,ty=0;
//每个方向都尝试一下
for (int i = 0; i < 4; i++) {
tx=x+dir[i][0];
ty=y+dir[i][1];
// 判断坐标是否出界
if(tx>n||ty>m||tx<1||ty<1)
continue;
//如果没在已经走过的路径上并且是不是障碍物
if(bool[tx][ty]==0&&maze[tx][ty]==0){
bool[tx][ty]=1;
dfs(tx,ty,step+1);
bool[tx][ty]=0;
}
}
return;
}
public static void main(String[] args) {
n=in.nextInt();
m=in.nextInt();
//创建迷宫
for (int i = 1; i <=n; i++) {
for (int j = 1; j <=m; j++) {
maze[i][j]=in.nextInt();
bool[i][j]=0;
}
}
//输入起点终点
int start=in.nextInt();
int end =in.nextInt();
p=in.nextInt();
q=in.nextInt();
bool[start][end]=1;
dfs(start,end,0);
System.out.println(min);
}
}
dfs走迷宫
最新推荐文章于 2022-03-21 23:45:21 发布