关于广度优先搜索算法(BFS)题目的套路小结

  这两天查了很多广度优先搜索算法,看到了很多文章,感觉里面对于这种模板的讲解不够细致。   首先,广度优先算法的核心是它一定是把同一级的子节点都拉入队列,之后才会去遍历下一级节点。   ...
摘要由CSDN通过智能技术生成

  这两天查了很多广度优先搜索算法,看到了很多文章,感觉里面对于这种模板的讲解不够细致。首先,广度优先算法的核心是它一定是把同一级的子节点都拉入队列,之后才会去遍历下一级节点。关于此算法的详细内容请自行查阅相关资料,本篇博客将集中在具体应用上。
  使用限定条件:最典型的是走迷宫,但说白了其实是题目要求我们探寻最短路径,或者说题目可以被简化成坐标按几种种步长移动(不局限于二维,也可能是一维),也不局限于寻路,也可以用于对某一特定条件节点的搜索,或是对这种特定坐标进行标记。但都有一个核心点,就是要连续搜索,在找到一个合法节点后需要去探知其附近的合法节点,直到这一个区域内符合合法节点的节点都被找到。
  注:以下所说的父子节点,从a坐标移动到b坐标,a节点就是父节点,b节点就是a的子节点

一.模板

本篇先以一道题的题解来说明问题

模板可以大体分成6部分
1.头文件段
2.坐标结构体段
3.障碍物预设段
4.已访问结点和移动坐标段
5.BFS算法函数段
6.主函数段

定义一个二维数组: 

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表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。
Input
一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。
Output
左上角到右下角的最短路径,格式如样例所示。
Sample Input
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
Sample Output
(0, 0)
(1, 0)
(2, 0)
(2, 1)
(2, 2)
(2, 3)
(2, 4)
(3, 4)
(4, 4)


1.头文件段
//这里使用c++的<queue>函数,这样可以快速进行队列的操作,没啥好解释的,背下
#include<iostream>
using namespace std;
#include<stdio.h>
#include<string.h>
#include<queue>

2.坐标结构体段
//记录结点坐标,特别注意,这里的坐标也可能是一维的,不要死板,具体情况具体分析。
struct mi{
    int x;
    int y;
}ca;

3.障碍物预设段(有可能没有,是无障碍题目)
//这里往往是初始化好的迷宫地图,或是什么其他条件的障碍物,在这里1就是障碍物,
这个地图要么是自己输入,要么是题目已知条件
int map[5][5];
             ={
                {
  0,1,0,0,0},
                {
  0,1,0,1,0},
                {
  
  • 26
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值