
BFS(广度优先搜索来啦)
发布日期:2021-05-08 01:40:35
浏览次数:25
分类:精选文章
本文共 1318 字,大约阅读时间需要 4 分钟。
一、BFS简介
BFS即breadth-first search,又称为宽度优先搜索,是最简便的图的搜索算法之一,它是使用队列来实现的。
已知图G=(V,E)和一个源顶点s,宽度优先搜索以一种系统的方式探寻G的边,从而“发现”s所能到达的所有顶点,并计算s到所有这些顶点的距离(最少边数),该算法同时能生成一棵根为s且包括所有可达顶点的宽度优先树。对从s可达的任意顶点v,宽度优先树中从s到v的路径对应于图G中从s到v的最短路径,即包含最小边数的路径。该算法对有向图和无向图同样适用。 之所以称之为宽度优先算法,是因为算法自始至终一直通过已找到和未找到顶点之间的边界向外扩展,就是说,算法首先搜索和s距离为k的所有顶点,然后再去搜索和S距离为k+l的其他顶点。二、BFS解决问题
BFS可以解决两类问题:
第一类问题:从节点A出发,有前往节点B的路径吗? 第二类问题:从节点A出发,前往节点B的哪条路径最近?三、代码实现
我们以一个人的朋友圈中有没有芒果销售商为例,进行广度优先遍历。
from collections import dequedef persion_is_seller(name): return name[-1] == 'm' # 假设一个人如果姓名以m结尾,那他就是芒果销售商graph={ }graph['you'] = ['alice', 'bob', 'claire']graph['bob'] = ['anuj', 'peggy']graph['alice'] = ['peggy']graph['claire'] = ['thom', 'jonny']graph['anuj'] = []graph['jonny'] = []graph['peggy'] = []graph['thom'] = []def BFS(name): search_queue = deque() search_queue += graph[name] searched = [] while search_queue: # 注:popleft是弹出第一个元素,是在队列中使用的,括号里不可用带参数 # pop是弹出最后一个元素,是用于栈的出栈的,括号里可以带参数 person = search_queue.popleft() if person not in searched: if persion_is_seller(person): print(person + ' is a mango seller') return True else: search_queue += graph[person] searched.append(person) # 已经遍历过的要做标记,以防止出现无线循环的情况 return FalseBFS('you')
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年03月28日 22时03分45秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
MySQL-时区导致的时间前后端不一致
2021-05-08
2021-04-05阅读小笔记:局部性原理
2021-05-08
go语言简单介绍,增强了解
2021-05-08
python file文件操作--内置对象open
2021-05-08
架构师入门:搭建基本的Eureka架构(从项目里抽取)
2021-05-08
MongoDB 快速扫盲贴
2021-05-08
EXTJS4.2——10.Tab+Iframe
2021-05-08
one + two = 3
2021-05-08
sctf_2019_easy_heap
2021-05-09
PyQt5之音乐播放器
2021-05-09
Redis进阶实践之十八 使用管道模式提高Redis查询的速度
2021-05-09
SQL注入
2021-05-09
MPI Maelstrom POJ - 1502 ⭐⭐ 【Dijkstra裸题】
2021-05-09
Problem A - Sequence with Digits (数学推导)
2021-05-09
Problem 330A - Cakeminator (思维)
2021-05-09
LeetCode75 颜色分类 (三路快排C++实现与应用)
2021-05-09
C语言+easyX图形库的推箱子实现
2021-05-09
调试vs2019代码的流程
2021-05-09
脱壳与加壳-加壳-6-代码实现加密导入表
2021-05-09
Typora配置PicGo时,提示Failed to fetch
2021-05-09