系列文章目录
【蓝桥杯学习笔记】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)https://baike.baidu.com/item/%E5%AE%BD%E5%BA%A6%E4%BC%98%E5%85%88%E6%90%9C%E7%B4%A2/5224802