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 网络编程起步(Socket发送消息)
Sep 06 Python
python利用拉链法实现字典方法示例
Mar 25 Python
python requests 使用快速入门
Aug 31 Python
PyQt5 pyqt多线程操作入门
May 05 Python
使用Python和Prometheus跟踪天气的使用方法
May 06 Python
对python 中class与变量的使用方法详解
Jun 26 Python
pycharm配置git(图文教程)
Aug 16 Python
wxPython实现列表增删改查功能
Nov 19 Python
基于Python检测动态物体颜色过程解析
Dec 04 Python
关于Pytorch的MLP模块实现方式
Jan 07 Python
Keras中的两种模型:Sequential和Model用法
Jun 27 Python
如何利用Python给自己的头像加一个小国旗(小月饼)
Oct 02 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
php日期转时间戳,指定日期转换成时间戳
2012/07/17 PHP
实测在class的function中include的文件中非php的global全局环境
2013/07/15 PHP
thinkphp缓存技术详解
2014/12/09 PHP
PHP判断是否连接上网络的方法
2015/07/01 PHP
php算法实例分享
2015/07/14 PHP
PHP中的Trait 特性及作用
2016/04/03 PHP
PHP的swoole扩展安装方法详细教程
2016/05/18 PHP
phalcon model在插入或更新时会自动验证非空字段的解决办法
2016/12/29 PHP
thinkPHP5实现数据库添加内容的方法
2017/10/25 PHP
Yii框架实现对数据库的CURD操作示例
2019/09/03 PHP
摘自百度的图片轮换效果代码
2007/11/19 Javascript
用js实现计算加载页面所用的时间
2010/04/02 Javascript
javascript encodeURI和encodeURIComponent的比较
2010/04/03 Javascript
深入理解JavaScript系列(14) 作用域链介绍(Scope Chain)
2012/04/12 Javascript
js计算系统当前日期是星期几的方法
2016/07/14 Javascript
解析Vue2.0双向绑定实现原理
2017/02/23 Javascript
分分钟玩转Vue.js组件(二)
2017/03/01 Javascript
微信小程序手势操作之单触摸点与多触摸点
2017/03/10 Javascript
Angularjs2不同组件间的通信实例代码
2017/05/06 Javascript
webpack4之如何编写loader的方法步骤
2019/06/06 Javascript
ant design的table组件实现全选功能以及自定义分页
2020/11/17 Javascript
python中from module import * 的一个坑
2014/07/20 Python
python中dir函数用法分析
2015/04/17 Python
Python自动扫雷实现方法
2015/07/25 Python
Python实现约瑟夫环问题的方法
2016/05/03 Python
Python urlopen()参数代码示例解析
2020/12/10 Python
Canvas绘制浮动球效果的示例
2017/12/29 HTML / CSS
吃透移动端 1px的具体用法
2019/12/16 HTML / CSS
电子商务专业学生职业生涯规划
2014/03/07 职场文书
法人代表委托书
2014/04/04 职场文书
学术诚信承诺书
2014/05/26 职场文书
幼儿园小班见习报告
2014/10/31 职场文书
离婚协议书范文
2015/01/26 职场文书
小学三八妇女节活动总结
2015/02/06 职场文书
技术负责人岗位职责
2015/02/10 职场文书
2016年教师学习廉政准则心得体会
2016/01/20 职场文书