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的*args和**kwargs用法
Nov 01 Python
Pandas 对Dataframe结构排序的实现方法
Apr 10 Python
python实现简单http服务器功能
Sep 17 Python
python读取目录下最新的文件夹方法
Dec 24 Python
Python3安装psycopy2以及遇到问题解决方法
Jul 03 Python
python制作朋友圈九宫格图片
Nov 03 Python
Pytorch 多维数组运算过程的索引处理方式
Dec 27 Python
Python版中国省市经纬度
Feb 11 Python
浅析Python 抽象工厂模式的优缺点
Jul 13 Python
python类共享变量操作
Sep 03 Python
浅析python函数式编程
Sep 26 Python
使用python-cv2实现Harr+Adaboost人脸识别的示例
Oct 27 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
基于Windows下Apache PHP5.3.1安装教程
2010/01/08 PHP
php 获取本地IP代码
2013/06/23 PHP
在SAE上搭建最新wordpress的方法
2014/12/21 PHP
PHP常用的三种设计模式
2017/02/17 PHP
THINKPHP截取中文字符串函数实例代码
2017/03/20 PHP
小型js框架veryide.librar源代码
2009/03/05 Javascript
JQuery 绑定事件时传递参数的实现方法
2009/10/13 Javascript
jQuery的实现原理的模拟代码 -4 重要的扩展函数 extend
2010/08/03 Javascript
火狐4、谷歌12不支持Jquery Validator的解决方法分享
2011/06/20 Javascript
js优化针对IE6.0起作用(详细整理)
2012/12/25 Javascript
jquery全选/全不选/反选另一种实现方法(配合原生js)
2013/04/07 Javascript
js从Cookies里面取值的简单实现
2014/06/30 Javascript
jQuery实现首页图片淡入淡出效果的方法
2015/06/10 Javascript
jQuery取消特定的click事件
2016/02/29 Javascript
JQuery实现列表中复选框全选反选功能封装(推荐)
2016/11/24 Javascript
JS实现图片手风琴效果
2020/04/17 Javascript
web前端开发中常见的多列布局解决方案整理(一定要看)
2017/10/15 Javascript
vue生成token保存在客户端localStorage中的方法
2017/10/25 Javascript
vue 使用ref 让父组件调用子组件的方法
2018/02/08 Javascript
js操作二进制数据方法
2018/03/03 Javascript
vue实现点击按钮下载文件功能
2019/10/11 Javascript
Python监控主机是否存活并以邮件报警
2015/09/22 Python
15行Python代码带你轻松理解令牌桶算法
2018/03/21 Python
python3实现磁盘空间监控
2018/06/21 Python
TensorFlow打印tensor值的实现方法
2018/07/27 Python
Python之两种模式的生产者消费者模型详解
2018/10/26 Python
python爬虫之爬取百度音乐的实现方法
2019/08/24 Python
Python3实现建造者模式的示例代码
2020/06/28 Python
几个人围成一圈的问题
2013/09/26 面试题
社区敬老月活动实施方案
2014/02/17 职场文书
欢迎领导标语
2014/06/27 职场文书
大学考试作弊检讨书
2015/05/06 职场文书
项目备案申请报告
2015/05/15 职场文书
神秘岛读书笔记
2015/07/01 职场文书
《曹冲称象》教学反思
2016/02/20 职场文书
OpenCV-Python实现怀旧滤镜与连环画滤镜
2021/06/09 Python