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进行稳定可靠的文件操作详解
Dec 31 Python
Python常用的内置序列结构(列表、元组、字典)学习笔记
Jul 08 Python
利用Python实现图书超期提醒
Aug 02 Python
使用Python处理Excel表格的简单方法
Jun 07 Python
python 移除字符串尾部的数字方法
Jul 17 Python
Python爬虫框架Scrapy常用命令总结
Jul 26 Python
Python实现的括号匹配判断功能示例
Aug 25 Python
Python-Seaborn热图绘制的实现方法
Jul 15 Python
Python3 获取文件属性的方式(时间、大小等)
Mar 12 Python
Python爬虫实现selenium处理iframe作用域问题
Jan 27 Python
用Python的绘图库(matplotlib)绘制小波能量谱
Apr 17 Python
用Python仅20行代码编写一个简单的端口扫描器
Apr 08 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
动态网站web开发 PHP、ASP还是ASP.NET
2006/10/09 PHP
PHP 字符串编码截取函数(兼容utf-8和gb2312)
2009/05/02 PHP
PHP5.3以上版本安装ZendOptimizer扩展
2015/03/27 PHP
php转换颜色为其反色的方法
2015/04/27 PHP
PHP常用的三种设计模式汇总
2016/08/28 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
ThinkPHP3.2.3框架实现的空模块、空控制器、空操作,跳转到错误404页面图文详解
2019/04/03 PHP
关于Curl在Swoole协程中的解决方案详析
2019/09/12 PHP
Js+Dhtml:WEB程序员简易开发工具包(预先体验版)
2006/11/07 Javascript
ext checkboxgroup 回填数据解决
2009/08/21 Javascript
用jquery实现学校的校历(asp.net+jquery ui 1.72)
2010/01/01 Javascript
js实现网站首页图片滚动显示
2013/02/04 Javascript
JqueryMobile动态生成listView并实现刷新的两种方法
2014/03/05 Javascript
javascript中利用柯里化函数实现bind方法
2016/04/29 Javascript
从重置input file标签中看jQuery的 .val() 和 .attr(“value”) 区别
2016/06/12 Javascript
Webpack中css-loader和less-loader的使用教程
2017/04/27 Javascript
jQuery实现王者荣耀手风琴效果
2020/01/17 jQuery
举例讲解Python中的Null模式与桥接模式编程
2016/02/02 Python
Python中多线程的创建及基本调用方法
2016/07/08 Python
python3利用smtplib通过qq邮箱发送邮件方法示例
2017/12/03 Python
python3 property装饰器实现原理与用法示例
2019/05/15 Python
python3.7将代码打包成exe程序并添加图标的方法
2019/10/11 Python
tensorflow estimator 使用hook实现finetune方式
2020/01/21 Python
西班牙家用电器和电子产品购物网站:Mi Electro
2019/02/25 全球购物
个人找工作的自我评价
2013/10/17 职场文书
路政管理专业个人自荐信范文
2013/11/30 职场文书
建筑工程毕业生自我鉴定
2014/01/14 职场文书
法律顾问服务方案
2014/05/15 职场文书
物流专业专科生职业生涯规划书
2014/09/14 职场文书
推普周国旗下讲话稿
2014/09/21 职场文书
张丽莉观后感
2015/06/16 职场文书
教你如何用Python实现人脸识别(含源代码)
2021/06/23 Python
springboot 启动如何排除某些bean的注入
2021/08/02 Java/Android
一行Python命令实现批量加水印
2022/04/07 Python
vue选项卡切换的实现案例
2022/04/11 Vue.js
java获取一个文本文件的编码(格式)信息
2022/09/23 Java/Android