走迷宫

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);
		
		
	}

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值