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中使用动态变量名的方法
May 06 Python
Python实现字典依据value排序
Feb 24 Python
python调用fortran模块
Apr 08 Python
Python3使用requests发闪存的方法
May 11 Python
简单谈谈Python的pycurl模块
Apr 07 Python
Python实现中一次读取多个值的方法
Apr 22 Python
Python实现自定义函数的5种常见形式分析
Jun 16 Python
Python实现快速傅里叶变换的方法(FFT)
Jul 21 Python
python命令行工具Click快速掌握
Jul 04 Python
关于阿里云oss获取sts凭证 app直传 python的实例
Aug 20 Python
Python中包的用法及安装
Feb 11 Python
python 解决Fatal error in launcher:错误问题
May 21 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
mysql_fetch_assoc和mysql_fetch_row的功能加起来就是mysql_fetch_array
2007/01/15 PHP
Zend Framework教程之Zend_Form组件实现表单提交并显示错误提示的方法
2016/03/21 PHP
Yii列表定义与使用分页方法小结(3种方法)
2016/07/15 PHP
PHP使用pdo实现事务处理操作示例
2018/09/05 PHP
PHP+ajax实现上传、删除、修改单张图片及后台处理逻辑操作详解
2020/02/12 PHP
PHP常用字符串输出方法分析(echo,print,printf及sprintf)
2021/03/09 PHP
JavaScript CSS 修改学习第四章 透明度设置
2010/02/19 Javascript
多种方法实现360浏览器下禁止自动填写用户名密码
2014/06/16 Javascript
js选项卡的实现方法
2015/02/09 Javascript
JS获取图片高度宽度的方法分享
2015/04/17 Javascript
JS遍历数组及打印数组实例分析
2016/01/21 Javascript
jquery 全选、全不选、反选效果的实现代码【推荐】
2016/05/05 Javascript
jquery插入兄弟节点的操作方法
2016/12/07 Javascript
解析微信JS-SDK配置授权,实现分享接口
2016/12/09 Javascript
js手机号批量滚动抽奖实现代码
2020/04/17 Javascript
canvas绘制七巧板
2017/02/03 Javascript
Vuejs实现购物车功能
2017/11/05 Javascript
React Native中ScrollView组件轮播图与ListView渲染列表组件用法实例分析
2020/01/06 Javascript
vue tab切换,解决echartst图表宽度只有100px的问题
2020/07/19 Javascript
jquery实现简单拖拽效果
2020/07/20 jQuery
Python命名空间详解
2014/08/18 Python
python使用wxPython打开并播放wav文件的方法
2015/04/24 Python
100行python代码实现跳一跳辅助程序
2018/01/15 Python
Python干货:分享Python绘制六种可视化图表
2018/08/27 Python
python 利用已有Ner模型进行数据清洗合并代码
2019/12/24 Python
python 生成任意形状的凸包图代码
2020/04/16 Python
Pandas之read_csv()读取文件跳过报错行的解决
2020/04/21 Python
Django 允许局域网中的机器访问你的主机操作
2020/05/13 Python
让IE6支持css3,让 IE7、IE8 都支持CSS3
2011/10/09 HTML / CSS
W3C公布最新的HTML5标准草案
2008/10/17 HTML / CSS
使用HTML5 Canvas绘制圆角矩形及相关的一些应用举例
2016/03/22 HTML / CSS
《颐和园》教学反思
2014/02/26 职场文书
校园安全演讲稿
2014/05/09 职场文书
中学语文教学反思
2016/02/16 职场文书
php字符串倒叙
2021/04/01 PHP
Python使用Opencv打开笔记本电脑摄像头报错解问题及解决
2022/06/21 Python