python实现广度优先搜索过程解析


Posted in Python onOctober 19, 2019

广度优先搜索

适用范围: 无权重的图,与深度优先搜索相比,深度优先搜索法占内存少但速度较慢,广度优先搜索算法占内存多但速度较快

复杂度: 时间复杂度为O(V+E),V为顶点数,E为边数

思路

广度优先搜索是以层为顺序,将某一层上的所有节点都搜索到了之后才向下一层搜索;

代码

from collections import deque

#解决从你的人际关系网中找到芒果销售商的问题
#使用字典表示映射关系
graph = {} 
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 is_target_node(name):
   return name[-1] == 'm'

#实现广度优先搜索算法 
def search(name):
   search_queue = deque() #创建一个队列
   search_queue += graph[name] 
   searched = [] #记录用于检查过的人
   while search_queue: #只要队列不为空
     person = search_queue.popleft() #就取出其中的第一个人
     if not person in searched: #这个人没有被检查过
       if is_target_node(person): #判断这个人是否是要查找的销售商
         print(person + " is target node!")
         return True
       else:
         search_queue += graph[person] #如果这个人不是,就将这个人的朋友压入队列
         searched.append(person) #将这个人追加到已检查过的字典中
   return False

#调用方法
search("you")

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在Python中使用swapCase()方法转换大小写的教程
May 20 Python
python安装Scrapy图文教程
Aug 14 Python
Python带动态参数功能的sqlite工具类
May 26 Python
使用python Fabric动态修改远程机器hosts的方法
Oct 26 Python
python调用staf自动化框架的方法
Dec 26 Python
python 实现selenium断言和验证的方法
Feb 13 Python
Python封装成可带参数的EXE安装包实例
Aug 24 Python
Pandas时间序列重采样(resample)方法中closed、label的作用详解
Dec 10 Python
python在不同条件下的输入与输出
Feb 13 Python
Python pip配置国内源的方法
Feb 14 Python
Python3爬虫中Ajax的用法
Jul 10 Python
Python基本知识点总结
Apr 07 Python
python字符串格式化方式解析
Oct 19 #Python
基于python3监控服务器状态进行邮件报警
Oct 19 #Python
使用python绘制温度变化雷达图
Oct 18 #Python
详解numpy矩阵的创建与数据类型
Oct 18 #Python
Python 3.6打包成EXE可执行程序的实现
Oct 18 #Python
详解pyinstaller selenium python3 chrome打包问题
Oct 18 #Python
python如何将两个txt文件内容合并
Oct 18 #Python
You might like
《忧国的莫里亚蒂》先导宣传图与STAFF公开
2020/03/04 日漫
php读取文件内容的方法汇总
2015/01/24 PHP
php实现SAE上使用storage上传与下载文件的方法
2015/06/29 PHP
PHP实现腾讯短网址生成api接口实例
2020/12/08 PHP
js实现DIV的一些简单控制
2007/06/04 Javascript
几个javascript操作word的参考代码
2009/10/26 Javascript
Jquery下判断Id是否存在的代码
2011/01/06 Javascript
js怎么判断flash swf文件是否加载完毕
2014/08/14 Javascript
js仿QQ中对联系人向左滑动、滑出删除按钮的操作
2016/04/07 Javascript
通过原生JS实现为元素添加事件的方法
2016/11/23 Javascript
nodejs个人博客开发第一步 准备工作
2017/04/12 NodeJs
详解在Vue中有条件地使用CSS类
2017/09/30 Javascript
微信小程序使用request网络请求操作实例
2017/12/15 Javascript
微信小程序http连接访问解决方案的示例
2018/11/05 Javascript
vue缓存的keepalive页面刷新数据的方法
2019/04/23 Javascript
[01:05:07]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第一场2月1日
2021/03/11 DOTA
Python格式化css文件的方法
2015/03/10 Python
Python判断值是否在list或set中的性能对比分析
2016/04/16 Python
Python反射用法实例简析
2017/12/22 Python
Python读取word文本操作详解
2018/01/22 Python
Python实现的堆排序算法示例
2018/04/29 Python
python使用pdfminer解析pdf文件的方法示例
2018/12/20 Python
python中将两组数据放在一起按照某一固定顺序shuffle的实例
2019/07/15 Python
flask框架单元测试原理与用法实例分析
2019/07/23 Python
Pytorch DataLoader 变长数据处理方式
2020/01/08 Python
python利用opencv实现SIFT特征提取与匹配
2020/03/05 Python
python使用numpy中的size()函数实例用法详解
2021/01/29 Python
英国领先的体验日提供商:Buyagift
2019/04/19 全球购物
世界经理人咨询有限公司面试
2014/09/23 面试题
企业口号大全
2014/06/12 职场文书
材料化学专业求职信
2014/07/15 职场文书
党员四风自我剖析材料思想汇报
2014/09/13 职场文书
给下属加薪申请报告
2015/05/15 职场文书
读书笔记怎么写
2015/07/01 职场文书
生日祝酒词大全
2015/08/10 职场文书
SqlServer数据库远程连接案例教程
2021/07/15 SQL Server