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制作在地图上模拟瘟疫扩散的Gif图
Mar 31 Python
Python3网络爬虫之使用User Agent和代理IP隐藏身份
Nov 23 Python
浅析python打包工具distutils、setuptools
Apr 20 Python
PyTorch上实现卷积神经网络CNN的方法
Apr 28 Python
Python中的单继承与多继承实例分析
May 10 Python
PHP实现发送和接收JSON请求
Jun 07 Python
python2和python3的输入和输出区别介绍
Nov 20 Python
树莓派+摄像头实现对移动物体的检测
Jun 22 Python
Python lambda表达式filter、map、reduce函数用法解析
Sep 11 Python
如何使用repr调试python程序
Feb 28 Python
PyTorch dropout设置训练和测试模式的实现
May 27 Python
代码复现python目标检测yolo3详解预测
May 06 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 上传文件的方法(类)
2009/07/30 PHP
Zend Framework教程之Zend_Config_Xml用法分析
2016/03/23 PHP
PHP自动补全表单的两种方法
2017/03/06 PHP
PHP正则表达式笔记与实例详解
2019/05/09 PHP
php 多个变量指向同一个引用($b = &$a)用法分析
2019/11/13 PHP
JS维吉尼亚密码算法实现代码
2010/11/09 Javascript
Javascript面象对象成员、共享成员变量实验
2010/11/19 Javascript
js arguments对象应用介绍
2012/11/28 Javascript
jQuery性能优化28条建议你值得借鉴
2013/02/16 Javascript
jquery二级导航内容均分的原理及实现
2013/08/13 Javascript
JS+flash实现chrome和ie浏览器下同时可以复制粘贴
2013/09/22 Javascript
基于js与flash实现的网站flv视频播放插件代码
2014/10/14 Javascript
vue组件学习教程
2017/09/09 Javascript
vue init失败简单解决方法(终极版)
2017/12/22 Javascript
JavaScript中BOM对象原理与用法分析
2019/07/09 Javascript
Python 使用PIL numpy 实现拼接图片的示例
2018/05/08 Python
kaggle+mnist实现手写字体识别
2018/07/26 Python
Python的argparse库使用详解
2018/10/09 Python
Python中文件的写入读取以及附加文字方法
2019/01/23 Python
python 获取sqlite3数据库的表名和表字段名的实例
2019/07/17 Python
基于Python函数和变量名解析
2019/07/19 Python
Python3分析处理声音数据的例子
2019/08/27 Python
selenium 多窗口切换的实现(windows)
2020/01/18 Python
Ubuntu18.04安装 PyCharm并使用 Anaconda 管理的Python环境
2020/04/08 Python
浅谈python opencv对图像颜色通道进行加减操作溢出
2020/06/03 Python
很酷的小工具和电子产品商城:GearBest
2016/11/19 全球购物
Toppik顶丰增发纤维官网:解决头发稀疏
2017/12/30 全球购物
澳大利亚礼品卡商店:Gift Card Store
2019/06/24 全球购物
丧事主持词大全
2014/04/02 职场文书
擅自离岗检讨书
2014/09/12 职场文书
2015年毕业生自荐信范文
2015/03/24 职场文书
天鹅湖观后感
2015/06/09 职场文书
竞聘演讲报告:基本写作有哪些?附开头范文
2019/10/16 职场文书
关于python爬虫应用urllib库作用分析
2021/09/04 Python
面试被问select......for update会锁表还是锁行
2021/11/11 MySQL
关于mysql中时间日期类型和字符串类型的选择
2021/11/27 MySQL