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中使用PyQt把网页转换成PDF操作代码实例
Apr 23 Python
在Python中使用mechanize模块模拟浏览器功能
May 05 Python
Python多线程和队列操作实例
Jun 21 Python
详解Django框架中用context来解析模板的方法
Jul 20 Python
centos 安装python3.6环境并配置虚拟环境的详细教程
Feb 22 Python
python基础教程项目四之新闻聚合
Apr 02 Python
Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】
Jun 18 Python
python3 实现爬取TOP500的音乐信息并存储到mongoDB数据库中
Aug 24 Python
如何使用Python破解ZIP或RAR压缩文件密码
Jan 09 Python
Python unittest discover批量执行代码实例
Sep 08 Python
Python实现LR1文法的完整实例代码
Oct 25 Python
Python 数据可视化之Bokeh详解
Nov 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+xml实现在线英文词典之添加词条的方法
2015/01/23 PHP
浅析php静态方法与非静态方法的用法区别
2016/05/17 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
硬盘浏览程序,保存成网页格式便可使用
2006/12/03 Javascript
JavaScript 组件之旅(四):测试 JavaScript 组件
2009/10/28 Javascript
javascript event 事件解析
2011/01/31 Javascript
把字符串按照特定的字母顺序进行排序的js代码
2014/01/28 Javascript
jquery选择器大全 全面详解jquery选择器
2014/03/06 Javascript
Ajax局部更新导致JS事件重复触发问题的解决方法
2014/10/14 Javascript
JavaScript实现的多种鼠标拖放效果
2015/11/03 Javascript
jQuery点击导航栏选中更换样式的实现代码
2017/01/23 Javascript
整理关于Bootstrap模态弹出框的慕课笔记
2017/03/29 Javascript
详解Angular2中Input和Output用法及示例
2017/05/21 Javascript
Angular 2父子组件之间共享服务通信的实现
2017/07/04 Javascript
关于jQuery里prev()的简单操作代码
2017/10/27 jQuery
浅谈vue-cli加载不到dev-server.js的解决办法
2017/11/24 Javascript
vue-cli实现多页面多路由的示例代码
2018/01/30 Javascript
Python使用chardet判断字符编码
2015/05/09 Python
Python 3.x读写csv文件中数字的方法示例
2017/08/29 Python
python创造虚拟环境方法总结
2019/03/04 Python
python使用ctypes调用扩展模块的实例方法
2020/01/28 Python
python实现音乐播放器 python实现花框音乐盒子
2020/02/25 Python
CSS3教程(6):创建网站多列
2009/04/02 HTML / CSS
CheapTickets香港机票预订网站:CheapTickets.hk
2019/06/26 全球购物
西班牙最好的在线购买葡萄酒的商店:Vinoseleccion
2019/10/30 全球购物
中专生求职自荐信范文
2013/12/22 职场文书
红领巾心向党广播稿
2014/01/19 职场文书
小学生开学感言
2014/02/28 职场文书
《小池塘》教学反思
2014/02/28 职场文书
消防安全员岗位职责
2014/03/10 职场文书
公司离职证明范本(5篇)
2014/09/17 职场文书
2015年“我们的节日·中秋节”活动总结
2015/07/30 职场文书
小学四年级班主任工作经验交流材料
2015/11/02 职场文书
2016年公共机构节能宣传周活动总结
2016/04/05 职场文书
MySQL快速插入一亿测试数据
2021/06/23 MySQL
python中redis包操作数据库的教程
2022/04/19 Python