bfs广度优先搜索算法解决迷宫图的最短路径问题

dfs和bfs是搜索算法的经典,解决迷宫图最短路径问题,dfs解决起来很麻烦,但是bfs却很在行。

例题

黄色是障碍物,不可走
在这里插入图片描述

思路分析

bfs用到队列,Java中使用LinkedList,将开始的地点加入到队列,然后开始循环,以该点(也就是队列中最前面的元素)为基础,向四个方向探索,探索前做好判断,探索完所有方向之后,将改点弹出。循环的终止条件为队列为空或者已到达终点

代码实现

public class Main {
	public static void main(String[] args) {
		int[][] map=new int [5][4];//地图
		boolean[][] view = new boolean[5][4];//保存已访问过的点
		boolean flag=false;//标记是否找到
		map[0][2]=1;//障碍物
		map[2][2]=1;
		map[3][1]=1;
		map[4][3]=1;
		LinkedList<Local>queue=new LinkedList<>();
		queue.add(new Local(0,0,0));//从(0,0)点开始
		view[0][0]=true;
		
		while(queue.size()!=0) {
			int x=queue.getFirst().x;
			int y=queue.getFirst().y;
			int s=queue.getFirst().step;
			
			//如果找到了终点
			if(x==2&&y==3) {
				System.out.printf("最短%d步",s);
				flag=true;
				break;
			}
			
			//可以走的判定条件是:下一步的下标不越界&&下一步不是已访问过&&下一步不是障碍物
			//向左
			if(x-1>=0&&view[y][x-1]==false&&map[y][x-1]!=1) {
				queue.add(new Local(y,x-1,s+1));//探索
				view[y][x-1]=true;//标记为已访问
			}
			//向右
			if(x+1<=3&&view[y][x+1]==false&&map[y][x+1]!=1) {
				queue.add(new Local(y,x+1,s+1));
				view[y][x+1]=true;
			}
			//向上
			if(y-1>=0&&view[y-1][x]==false&&map[y-1][x]!=1) {
				queue.add(new Local(y-1,x,s+1));
				view[y-1][x]=true;
			}
			//向下
			if(y+1<=4&&view[y+1][x]==false&&map[y+1][x]!=1) {
				queue.add(new Local(y+1,x,s+1));
				view[y+1][x]=true;
			}
			queue.removeFirst();
		}
		if(!flag) {
			System.out.println("没找到!");
		}
	}
	
	static class Local{
		public int x;
		public int y;
		public int step;
		Local(int i,int j,int s){
			y=i;
			x=j;
			step=s;
		}
	}
}

当然以上代码只根据例题编写,朋友理解之后可以单独做一个bfs方法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值