0
点赞
收藏
分享

微信扫一扫

【蓝桥杯学习笔记】10. BFS — 广度优先遍历 +《走迷宫》

前行的跋涉者 2022-04-04 阅读 91

系列文章目录

【蓝桥杯学习笔记】1. 入门基本语法及练习题

【蓝桥杯学习笔记】2. 常用模型----最大公约数和最小公倍数

【蓝桥杯学习笔记】3. 质数判断

【蓝桥杯学习笔记】5. 矩阵乘法

【蓝桥杯学习笔记】6.一图看懂差分数组+《小明的彩灯》

【蓝桥杯学习笔记】7. 哈曼夫树

【蓝桥杯学习笔记】8.itertools- 为高效循环而创建迭代器的函数
【蓝桥杯学习笔记】9. 解立方根——二分法+牛顿迭代法


文章目录


前言

  蓝桥本笔记-----从入门到放弃

  本片文章使用Python语言编写----Now is better than never


一、BFS简介

广度优先搜索算法(Breadth-First Search,BFS)是一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。

实现过程:

 

二、经典案例——《走迷宫》

1.题目

 

2.代码实现

代码如下(示例):

from collections import deque
N,M = map(int,input().split())
G = [list(map(int,input().split()))for _ in range(N)]
out = list(map(int,input().split())) # 起始和终点
around = [[1,0],[-1,0],[0,1],[0,-1]] # 四周
q = deque([(out[0]-1,out[0]-1,0)]) #  初始位置(x,y,长度) 加入循环队列
x,y,L = 0,0,0 # 变量


# BFS 广度优先遍历
def check(a,b):
    return 0<= a < N and 0<= b < M and G[a][b] == 1
    # 不越界 且 有“路”
while q:
    x,y,L = q.popleft() # 第一个位置出队

    if x==out[2]-1 and y==out[3]-1: #出迷宫
        print(L)
        break 

    for i,j in around: #寻找四周的路
        a,b = x+i,y+j
        if check(a,b):
            G[a][b] = 0 # 遍历完成就置为“障碍”
            q.append([a,b,L+1])
            
if x!=out[2]-1 and y!=out[3]-1: #出不迷宫
    print(-1)
        

总结

BFS常用来做最短路径的搜索算法,注意与深度优先算法(DFS)区分,下节将介绍DFS的用法。

参考:
宽度优先搜索_百度百科 (baidu.com)icon-default.png?t=M276https://baike.baidu.com/item/%E5%AE%BD%E5%BA%A6%E4%BC%98%E5%85%88%E6%90%9C%E7%B4%A2/5224802

举报

相关推荐

0 条评论