BFS算法解决最短路径问题——迷宫

Java实现迷宫最短路径的BFS算法 利用广度优先遍历算法的特点,由于迷宫每次只能走一格,所以对于任意一个节点,bfs最先到达时一定时最短路径。 package recursion; import java.util.ArrayDeque; import java.util.Deque; import java.util.Stack; public class Maze { private class Node{ int x... 阅读详情

1.什么是bfs算法

这个博主讲的很详细,链接放在下面了

https://blog.youkuaiyun.com/weixin_72060925/article/details/128145585?spm=1001.2014.3001.5506

2.bfs算法为什么可以解决最短路径问题

因为bfs算法是分层遍历,从起始结点开始,到目标结点,层数最少的就是最短路径,又因为我们规定了访问过的结点就不能被访问,所以又确定了最短路径唯一,那么我们记录结果的数组中一定是最短路径的过程

3.题目

4.代码实现

class pair{
    int x;
    int y;
    public pair(int x,int y)
    {
        this.x = x;
        this.y = y;
    }
}
public class BFS {
    public static void bfs()
    {
        Queue<pair> queue = new LinkedList<>();
        queue.add(new pair(0, 0));//添加元素
        mark[0][0] = "";//赋空

        while(!queue.isEmpty())//如果队列不为空
        {
            pair top = queue.poll();//队头元素出队
            for(int i = 0;i<4;i++)//遍历上下左右四个方向
            {
                int nex = top.x+dx[i];
                int ney = top.y+dy[i];
                if(nex >= 0 && nex < n && ney >= 0 && ney<m && mark[nex][ney].equals("") && map[nex][ney]=='0')
                {
                    mark[nex][ney] = mark[top.x][top.y] + str[i];
                    queue.add(new pair(nex,ney));
                }
            }
        }
        System.out.println(mark[n-1][m-1]);
    }
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        n = scanner.nextInt();
        m = scanner.nextInt();
        String s = scanner.nextLine();
        for(int i = 0;i<n;i++)
                map[i] = scanner.nextLine().toCharArray();
        for (int i = 0; i < n; i++) {
            for(int j = 0;j<m;j++){
                mark[i][j] = "";
            }
        }
        bfs();
    }
    public static final int N = 100;
    public static int n,m;//地图的行列
    public static char[][] map = new char[N][N];//地图
    public static String[][] mark = new String[N][N];//如果mark[i][j]为null那就没有走过该点,还可以存储信息
    public static int[] dx = {1,0,0,-1};
    public static int[] dy = {0,-1,1,0};
    public static String[] str = {"D","L","R","U"};//下,左,右,上
}

BFS解迷宫问题(经典BFS算法) 【问题描述】 下图给出了一个迷宫的平面图,其中标记为 1 的为障碍,标记为 0 的为可 以通行的地方。 010000 000100 001001 110000 迷宫的入口为左上角,出口为右下角,在迷宫中,只能从一个位置走到这 个它的上、下、左、右四个方向之一。 对于上面的迷宫,从入口开始,可以按DRRURRDDDR 的顺序通过迷宫, 一共 10 步。其中 D、U、L、R 分别表示向下、向上、向左、... 阅读详情

相关推荐

ESP32C6+ESP-IDF5.2实战:基于RS485的ModbusRTU从站开发与调试

本文详细介绍了基于ESP32C6和ESP-IDF5.2开发ModbusRTU从站的实战指南。涵盖硬件连接、协议实现、ESP-Modbus库移植、寄存器映射及调试技巧,帮助开发者快速构建稳定可靠的工业级RS485通信节点,并解决常见通信故障。

play7的博客 1188

【C++数据结构 | 队列速通】图解BFS算法走迷宫最短路径问题

本文将会详讲队列和图解BFS算法,将BFS具象化,帮助读者在短时间内掌握队列的基本操作及BFS广度优先搜索算法

来都来了,点篇看看吧(= 5827

PCB中的CAF深度剖析与对策研究

摘要:本文系统研究了PCB板的导电阳极丝(CAF)问题,阐明了CAF是在电场作用下铜离子沿玻纤微裂通道迁移形成导电丝的现象,其形成需铜、水汽、电解质、偏压和迁移通道五个条件。CAF会导致PCB绝缘性能下降和信号传输异常,严重影响电子产品可靠性。研究提出了板材选择、钻孔工艺控制、叠板结构优化等预防措施,以及增大孔距、错位排列等设计注意事项,并介绍了IPC-TM-650-2.6.25测试标准。未来应在耐CAF材料、测试技术和制造工艺方面深入研究,以提升PCB可靠性。(150字)

2401_84691632的博客 1704

BFS算法之迷宫的最短路径

题目描述 下图给出了一个迷宫的平面图,其中标记为1的为障碍,标记为0的为可以通行的地方。 010000 000100 001001 110000 迷宫的入口为左上角,出口为右下角,在迷宫中,只能从一个位置走到这 个它的上、下、左、右四个方向之一。 对于上面的迷宫,从入口开始,可以按DRRURRDDDR的顺序通过迷宫, 一共10 步。其中D、U、L、R分别表示向下、向上、向左、向右走。 对于下面这个更复杂的迷宫(30 行50 列),请找出一种通过迷宫的方式,其使用的步数最少,...

qwexzvby的博客 3281

ROS应用之如何配置RTOS满足机器人系统中的实时要求

实时操作系统(RTOS)基本概念实时操作系统(RTOS)是设计用于实时应用的操作系统,其主要目标是在确定的时间内完成任务。RTOS的任务调度算法和优先级控制机制能够确保高优先级任务按时完成。精确的传感器数据采集:传感器数据需要在规定时间内采集并传输给控制系统。快速响应外部事件:对于控制系统,需要确保指令在最短的时间内得到响应。任务的调度周期:任务的周期可以通过公式计算,其中 ftask 是任务的调度频率。优先级分配。

weixin_68094467的博客 1007

Vue - 超强实现网页禁止浏览器缩放功能,浏览器缩放时保持网页不变形、元素不会被挤压等,屏蔽浏览器鼠标滚轮缩放页面(提供详细示例代码,一次引入整个网站无人可以搞乱你的页面布局及样式)

vue,nuxt,禁止浏览器缩放,如何用户缩放浏览器导致页面变形,网页缩放后页面变形了怎么办,怎么解决网站被缩放后元素乱套错乱,vue怎么禁止网页不被缩放,vue如何禁止浏览器缩放,vue缩放网页变形影响布局怎么办,vue电脑分辨率及缩放导致页面变形的问题,前端页面解决浏览器或者系统被放大和缩小导致的显示问题,Vue中页面自适应缩放,如何防止Vue页面缩放时变形/调整大小,Vue项目中,防止页面被缩放和放大,vue等比例缩放网页,网页缩放后界面变形咋办,禁止页面缩放,vue禁止浏览器改变窗口大小,Vue项目

🏆 前端领域优质创作者 1万+

广度优先搜索(BFS)算法解决迷宫最短路径问题

广度优先搜索算法实践:迷宫的最短路径问题

CDSNT的博客 2756

HANA-公司间销售ICS-IDOC系统配置-保姆级配置文档

合作伙伴编号:这个客户表示收票方(销售公司在生产公司中所对应的客户代码,卖方开票,买方收票),也就是咱们在配置消息类型输出的时候合作伙伴的类型的一个具体的客户编码,这个是站在发货工厂的角度去看的,也就是EDI 输出的 BP 合作伙伴的编号;在项目实施过程中经常会遇到关联方交易的问题,有公司间采购的业务场景,也会存在公司间销售的业务场景,本文将着重讲解公司间销售在SAP系统中的实现场景。在这个过程中,销售公司向客户开票产生应收,而生产公司向销售公司开票产生自己的应收,同时销售公司向生产公司产生应付。

我小时候很黑的博客 2389

小白学BFS:迷宫最短路径

小白慢悠悠写一天的BFS寻找最短路径条数的问题

qq_56089122的博客 1573

Unity 面试篇|(四)Unity性能优化篇 【全面总结 | 持续更新】

Unity中,CPU准备好需要绘制的元素,对底层图形程序接口进行调用的过程,每次引擎准备数据并通知GPU的过程称为一次Draw Call。DrawCall越高对显卡的消耗就越大。降低DrawCall的方法:动态合批静态合批降低shader的等级特性场景优化策略——遮挡技术。rectMask2D替代Mask。

游戏开发小Y的博客 13万+

使用Python,OpenCV查找图像中的最亮点

这篇博客展示了,为什么在图像中找到最亮的点之前应用高斯模糊是至关重要的。 通过应用高斯模糊,可以将每个给定半径内的像素平均在一起。取平均值可以去除高频噪声,否则会影响cv2.minMaxLoc函数的结果。 一定要研究高斯模糊半径的恰当值。如果取值太小,将会减轻平均值的影响,而忽略了更大、更亮的区域。但是如果半径太大,将无法探测到小的明亮区域。

qq_40985985的博客 3809

迷宫问题(bfs)

给定一个 n×nn×n 的二维数组,如下所示: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, }; 它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。 数据保证至少存在一条从左上角走到右下角的路径。 输入格式 第一行包含整数 n。 接下来 nn 行,每行包含 nn 个整数 0 或 1,表示迷宫

qq_43738331的博客 1318

【Python搞定车载自动化测试】——Python实现车载以太网DoIP刷写(含Python源码)

随着智能电动汽车行业的发展,汽车=智能终端+四个轮子,而人工智能也发展越来越快,Python语言使用越来越广,本章节主要介绍如何使用Python语言基于Pytest自动化框架来实现DoIP诊断自动化测试。首先回顾一下DoIP诊断基础知识:DoIP(Diagnosis over Internet Protocol)是一种用于车辆诊断的网络通信协议。它基于现代互联网技术,允许通过以太网或IP网络进行车辆诊断和通信。

测试领域技术分享 3791

(算法竞赛)使用广度优先搜索(BFS)解决迷宫最短路径问题

Python复制# 定义方向数组dx = [0, 0, 1, -1] # 行变化(右、左、下、上)dy = [1, -1, 0, 0] # 列变化这两个数组定义了四个可能的移动方向:右、左、下、上。通过索引i,可以从dx和dy中获取对应方向的行和列偏移量。本文通过详细解析基于 BFS 的代码,展示了如何高效地解决迷宫最短路径问题。BFS 的逐层扩展特性使其成为解决此类问题的理想选择。通过合理使用队列和访问标记数组,代码能够高效地找到从起点到终点的最短路径,而不会出现超时问题。

m0_73581472的博客 1622

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【算法】使用BFS算法(队列、哈希等)解决最短路径问题(迷宫、基因变化、单词接龙、高尔夫)(C++)

我们这里主要探讨权值为1的最短路问题。而对于权值为1的最短路问题:即不考虑每个路径点的值,只考虑最短的路径是什么即可。

卜及中的博客 1360

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

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

dfs和bfs是搜索算法的经典,解决迷宫图最短路径问题,dfs解决起来很麻烦,但是bfs却很在行。 例题 黄色是障碍物,不可走 思路分析 bfs用到队列,Java中使用LinkedList,将开始的地点加入到队列,然后开始循环,以该点(也就是队列中最前面的元素)为基础,向四个方向探索,探索前做好判断,探索完所有方向之后,将改点弹出。循环的终止条件为队列为空或者已到达终点 代码实现 public class Main { public static void main(String[] args) {

VanGotoBilibili的博客 2409

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【C++算法】84.BFS解决最短路径问题_迷宫中离入口最近的出口

注意:自己一开始所在的地方不能作为出口,出口是和边界相邻的空白格所在的地方。实际上就是边权为1的最短路径问题,可以直接BFS。小人走到出口的地方就可以了,不需要走出去迷宫。

hlyd520的博客 521

从底层原理到实际应用:BFS 算法借助队列征服迷宫

在算法的世界里,迷宫类最短路径问题一直是经典且富有挑战性的存在。今天我们就来深入探讨一种强大的解决方案 ——BFS(广度优先搜索)算法。文章详细分析了该算法为何适用于迷宫问题,一步步拆解其算法思路,包括数据初始化和遍历过程。同时,还深入剖析了 BFS 算法的核心原理,着重讲解了算法中队列这一关键数据结构的具体操作,更有完整的代码示例供你参考。无论你是算法初学者,还是想提升解题能力的进阶者,这篇文章都将为你带来清晰且实用的指导,助你掌握用 BFS 算法解决迷宫类问题的技巧。

2301_79279099的博客 1294

【优选算法】BFS解决最短路问题(单源)

本篇文章列举了四个经典的LeetCode算法题目,包括迷宫中离入口最近的出口、最小基因变化、单词接龙和为高尔夫比赛砍树。我会在每道题中提到每道题的解题思路,并提供解决本题的C++代码。

是阿建吖! 1168

BFS - 八方向迷宫问题

迷宫问题(八方向) 给定一个迷宫,入口为左上角,出口为右下角,问是否有路径从入口到出口, 若有则输出一条这样的路径。注意移动可以从上、下、左、右、上左、上右、下左、下右八个方向进行。 迷宫输入0表示可走,输入1表示墙。易得可以用1将迷宫围起来避免边界问题。 本题采用BFS算法给出解。注意,利用BFS算法给出的路径必然是一条最短路径。 input: 1 6 8 0 1 1 1

note_online 2284

SDJZU 迷宫问题

题目描述 小明置身于一个迷宫,请你帮小明找出从起点到终点的最短路程。 小明只能向上下左右四个方向移动。 输入格式 输入包含多组测试数据。输入的第一行是一个整数T,表示有T组测试数据。 每组输入的第一行是两个整数N和M(1 接下来N行,每行输入M个字符,每个字符表示迷宫中的一个小方格。 字符的含义如下: ‘S’:起点 ‘E’:终点 ‘-’:空地,可以通过 ‘#’:障碍,无法

老鼠 789

python迷宫最短路径问题_迷宫最短路径问题的dfs,bfs实现

迷宫的最短路径给定一个大小为 N×M的迷宫。迷宫由通道和墙壁组成,每一步可以向邻接的上下左右四格的通道移动。请求出从起点到终点所需的小步数。请注意,本题假定从起点一定可以移动到终点限制条件:N,M<=100;样例输入:N=10,M=10('#','.','S','G'分别表示墙壁,通道,起点和终点)#S######.#......#..#.#.##.##.#.#........##.##.#...

weixin_39767983的博客 1812

POJ 3984 迷宫问题 (BFS)

POJ 3984 迷宫问题 (BFS) 思路: 迷宫是一个5 × 5的二维数组,从左上角(0, 0)位置开始,上下左右进行搜索,可以定义两个数组,即 dx[4]={1,-1,0,0};:表示x方向的变化;dy[4]={0,0,-1,1};:表示y方向的变化。 二者结合就是一个点可以上下左右移动。对于数组中的每个元素用结构体来存储,除了有x,y成员外,还要定义head,(如同邻接表)用来表示从左上角到右下角的最短路径中每个元素的前一个元素的下标,即保存路径。 注意:搜索的元素是否在迷宫内,是否

jianjun的专栏 1598

poj 3984 迷宫问题 【bfs + 路径记录】

迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11362   Accepted: 6796 Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0,

longge33445的博客 523

试题集—— 算法提高 学霸的迷宫

题目: 问题描述   学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗。但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维的格子迷宫,要进城堡必须得先通过迷宫。因为班长还有妹子要陪,磨刀不误砍柴功,他为了节约时间,从线人那里搞到了迷宫的地图,准备提前计算最短的路线。可是他现在正向妹子解释这件事情,于是就委托你帮他找一条最短的路线。 输入格式   第一行两个整数n, m

王乐平 技术博客 4684

[POJ 3984] 迷宫问题(BFS最短路径的记录和打印问题)

[POJ 3984] 迷宫问题(BFS最短路径的记录和打印问题) 题目链接:http://poj.org/problem?id=3984 宽度优先搜索最短路径的记录和打印问题 1 #include&lt;iostream&gt; 2 #include&lt;queue&gt; 3 #include&lt;cstring&gt; ...

Youpeng 237
上一篇: 蓝桥杯java-B组真题—动态规划
下一篇: 蓝桥杯国赛—路径之谜(dfs详细解法)
Vaclee
博客等级 码龄3年 471粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值