算法图解——广度优先搜索
本文章根据《算法图解》提供来写的。
# -*- coding = utf-8 -*-
# @Time : 2021/12/14 17:20
# @Author : 宁洪康
# @File : 广度优先搜索.py
# @Software : PyCharm
"""
以下是为找到芒果经销商而设计的算法
散列表graph用于映射人物关系
函数 person_is_seller 用于判断是否为芒果经销商
"""
from collections import dequegraph = {}graph["you"] = ["alice", "bob", "claire"]
graph["bob"] = ["anuj", "peggy"]
graph["alice"] = ["peggy"]
graph["claire"] = ["thom", "jonny"]
graph["anuj"] = []
graph["peggy"] = []
graph["thom"] = []
graph["jonny"] = []def person_is_seller(name):return name[-1] == "m"def search(name):search_queue = deque()search_queue += graph[name]searched = [] # 用于标记检查过的人,避免无线循环while search_queue: # 只要队不空person = search_queue.popleft() # 从队列中弹出一人if person not in searched:if person_is_seller(person):print(person + " is a mango seller!")return Trueelse:search_queue += graph[person] # 弹出的不是芒果经销商,将此人朋友都加入到搜索队列searched.append(person)return False # 关系网中没有芒果经销商search("you")"""
总结:
因为要在你的整个关系网中寻找芒果经销商,因此需要沿着每条边(一个人到另一个的连线)前行,因此运行时间至少为O(边数)
还使用了队列,将每个人添加到队列的时间为O(人数)
所以广度优先搜索的运行时间为O(人数+边数),记为O(V+E)
"""
算法图解——广度优先搜索相关推荐
- 算法导论--广度优先搜索和深度优先搜索
广度优先搜索 在给定图G=(V,E)和一个特定的源顶点s的情况下,广度优先搜索系统地探索G中的边,以期"发现"可从s 到达的所有顶点,并计算s 到所有这些可达顶点之间的距离(即最少 ...
- 常用算法2 - 广度优先搜索 深度优先搜索 (python实现)
1. 图 定义:图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合. 简单点的说:图由节点和边组成.一 ...
- 算法—12.广度优先搜索
1.具体算法 /*** Created by huazhou on 2015/12/6.*/ public class TestSearch {public static void main(Stri ...
- JS算法:广度优先搜索(BSF)的理解
广度优先搜索方法的实现 (基于<学习JavaScript数据结构与算法>补充学习) 实现步骤如下 1.用initializeColor函数来将color数组初始化为白色:也就是将每个节点初 ...
- java广度优先算法,算法之广度优先搜索
一.引言 上一次介绍的算法是深度优先搜索 这次我们来研究一下广度优先搜索,看看怎么理解以及写出这个算法 这个算法需要数据结构的基础--队列,如果没有这个基础的同学去恶补一下. 二.小小问题 Q:在一个 ...
- C++一本通基础算法:广度优先搜索(BFS)
tip:该算法将会疯狂使用队列,包括各种类型的队列 算法概述:先将起点入队,先向起点相邻的位置检索,如果满足条件,那么将这个位置入队. 然后将起点出队.再将所有与队首相邻且满足条件的位置入队,队首出队 ...
- 【算法】广度优先搜索(BFS)和深度优先搜索(DFS)
https://blog.csdn.net/raphealguo/article/details/7523411 https://blog.csdn.net/qq_41681241/article/d ...
- 小游戏系列算法之五广度优先搜索,双向广搜,八数码,华容道
前段时间在玩仙五前,遇上了蚩尤冢拼图这个小游戏. 其实就是八数码问题,一直想着如何才能用最少步数求解,于是就写了个程序. Q1:什么是八数码问题? A1:首先假定一个3*3的棋盘(如上图),分别有1, ...
- 【10大基础算法】广度优先搜索-NO7
http://www.cnblogs.com/skywang12345/p/3711483.html 广度优先搜索算法(Breadth-First-Search),是一种图形搜索算法.简单的说,BFS ...
最新文章
- 阿里二面:redis分布式锁过期了但业务还没有执行完,怎么办
- QIIME 2用户文档. 16鉴定和过滤嵌合体序列q2-vsearch(2018.11)
- python3读取excel数据-Python3读取和写入excel表格数据的示例代码
- php 服务常量,php常量
- ATP检查的一些TIPS
- unity 草 可以一棵棵种吗?_俗语“门前一棵柳,金银财宝往家走”啥意思?房前可以种柳树吗?...
- linux如何备份网站,linux怎么备份网站
- 别以为JDK8有了红黑树,HashMap就不会有死循环问题!
- 基于鸿蒙Hi3861和华为云平台的烟雾报警器(附源码)
- CentOS6.4 Install Nginx 1.4.4 到特定目录
- 蓝牙之十-avrcp代码调用关系
- k8s学习笔记-Docker篇
- 产品读书《B端产品经理必修课:从业务逻辑到产品构建全攻略》
- 【有利可图网】PS实战系列:PS美化婚纱照片
- 前端自学Vue笔记干货(第一版,持续更新中~~~)
- Unity3D FPS帧数修改实现详解
- 解压后在别的电脑能安装PS,在我电脑就提示安装文件损坏
- 如何实现同一个ip下同一个80端口部署多个网站?
- [转]步入成熟的无线视频应用 英特尔WiDi无线视频传输研究
- snowboy嵌入式_树莓派3B+使用snowboy唤醒