import java.util.Scanner;
public class 走迷宫 {
static int[][] a;
static int[][] book;
static int m = 0,n = 0;
static int p,q,min=1000;
static void dfs(int x,int y,int step){
int[][] next=new int[][]{ //为了编程方便,我定义了一个方向数组
{0,1}, //向右走
{1,0}, //向下走
{0,-1}, //向左走
{-1,0}}; //想上走
if(x==p&&y==q){ //判断是否已经到达目的地
if(step<min)
{
min=step; //更新最短路径
}
return ; //注意这个返回很重要 已经到达目的地就要结束继续走下去
}
for(int k=0;k<=3;k++)
{
//计算下一个点的坐标
int tx=x+next[k][0];
int ty=y+next[k][1];
if(tx<1||tx>n||ty<1||ty>m) //判断是否越界
{
continue;
}
if(a[tx][ty]==0&&book[tx][ty]==0)
{
book[tx][ty]=1; //标记这个点已经走过
dfs(tx,ty,step+1); // 开始尝试下一个点
book[tx][ty]=0; //尝试结束,取消这个点的标记
}
}
}
public static void main(String[] args) {
a=new int[51][51]; //一个二维数组 代表着迷宫
book=new int [51][51]; //用来标记是否已近走过的数组
Scanner sc=new Scanner(System.in);
int startX,startY;
m=sc.nextInt();n=sc.nextInt(); //输入迷宫的行数和列数
for(int i=1;i<=m;i++) //读入迷宫 自己写入数据 0代表可行 1代表有障碍物
for(int j=1;j<=n;j++)
a[i][j]=sc.nextInt();
startX=sc.nextInt(); startY=sc.nextInt(); //起始点
p=sc.nextInt(); q=sc.nextInt(); //目标位置
book[startX][startY]=1; //标记起点已经在路径中,防止后面重复走
dfs(startX,startY,0); //第三个参数为起始步数
System.out.println("最短路径="+min);
}
}
走迷宫
最新推荐文章于 2024-01-15 13:08:27 发布