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分割和拼接字符串
Nov 01 Python
从Python的源码浅要剖析Python的内存管理
Apr 16 Python
Python实现读取并保存文件的类
May 11 Python
Python全排列操作实例分析
Jul 24 Python
Python走楼梯问题解决方法示例
Jul 25 Python
Python基于Tkinter模块实现的弹球小游戏
Dec 27 Python
selenium+python截图不成功的解决方法
Jan 30 Python
Python3网络爬虫中的requests高级用法详解
Jun 18 Python
numpy求平均值的维度设定的例子
Aug 24 Python
pytorch实现Tensor变量之间的转换
Feb 17 Python
浅谈pandas.cut与pandas.qcut的使用方法及区别
Mar 03 Python
在pycharm中关掉ipython console/PyDev操作
Jun 09 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中iconv函数使用方法
2008/05/24 PHP
PHP实现APP微信支付的实例讲解
2018/02/10 PHP
Laravel框架搜索分页功能示例
2019/02/01 PHP
Prototype Class对象学习
2009/07/19 Javascript
js文件中调用js的实现方法小结
2009/10/23 Javascript
JavaScript显示表单内元素数量的方法
2015/04/02 Javascript
JavaScript使用indexOf获得子字符串在字符串中位置的方法
2015/04/06 Javascript
javascript中使用new与不使用实例化对象的区别
2015/06/22 Javascript
如何用jQuery实现ASP.NET GridView折叠伸展效果
2015/09/26 Javascript
JavaScript引用类型和基本类型详解
2016/01/06 Javascript
jQuery easyUI datagrid 增加求和统计行的实现代码
2016/06/01 Javascript
pm2 部署 node的三种方法示例
2017/10/20 Javascript
Vue.set()实现数据动态响应的方法
2018/02/07 Javascript
javascript数组常见操作方法实例总结【连接、添加、删除、去重、排序等】
2019/06/13 Javascript
python通过pil将图片转换成黑白效果的方法
2015/03/16 Python
Django 忘记管理员或忘记管理员密码 重设登录密码的方法
2018/05/30 Python
Sanic框架Cookies操作示例
2018/07/17 Python
Python检查ping终端的方法
2019/01/26 Python
Python通过len函数返回对象长度
2020/10/22 Python
TripAdvisor土耳其网站:全球知名旅行社区,真实旅客评论
2017/04/17 全球购物
windeln官方海外旗舰店:德淘超人气母婴超市
2017/12/15 全球购物
Maison Lab荷兰:名牌Outlet购物
2018/08/10 全球购物
全球速卖通俄罗斯站:AliExpress俄罗斯
2019/06/17 全球购物
什么是类的返射机制
2016/02/06 面试题
武汉东之林科技有限公司机试
2013/09/17 面试题
机械电子工程专业推荐信范文
2013/11/20 职场文书
学校百日安全生产活动总结
2014/07/05 职场文书
2014年司法局工作总结
2014/12/11 职场文书
给女朋友的道歉短信
2015/05/12 职场文书
大学文艺委员竞选稿
2015/11/19 职场文书
优秀新员工事迹材料
2019/05/13 职场文书
导游词之苏州阳澄湖
2019/11/15 职场文书
再见,2019我们不负使命;你好,2020我们砥砺前行
2020/01/03 职场文书
golang中实现给gif、png、jpeg图片添加文字水印
2021/04/26 Golang
Java实现聊天机器人完善版
2021/07/04 Java/Android
图文详解matlab原始处理图像几何变换
2021/07/09 Python