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中return语句用法实例分析
Aug 04 Python
简单学习Python time模块
Apr 29 Python
Python自动发邮件脚本
Mar 31 Python
python Opencv将图片转为字符画
Feb 19 Python
python寻找list中最大值、最小值并返回其所在位置的方法
Jun 27 Python
Django实现学员管理系统
Feb 26 Python
深入浅析Python科学计算库Scipy及安装步骤
Oct 12 Python
Python如何获取Win7,Win10系统缩放大小
Jan 10 Python
推荐值得学习的12款python-web开发框架
Aug 10 Python
解决Python import .pyd 可能遇到路径的问题
Mar 04 Python
用Python写一个简易版弹球游戏
Apr 13 Python
如何使用Tkinter进行窗口的管理与设置
Jun 30 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 HTML代码串截取代码
2008/12/29 PHP
php 表单数据的获取代码
2009/03/10 PHP
让textarea控件的滚动条怎是位与最下方
2007/04/20 Javascript
div浮层,滚动条移动,位置保持不变的4种方法汇总
2013/12/11 Javascript
jQuery 无限级菜单的简单实例
2014/02/21 Javascript
Javascript学习笔记之 对象篇(一) : 对象的使用和属性
2014/06/24 Javascript
javascript常用的方法分享
2015/07/01 Javascript
HTML5游戏引擎LTweenLite实现的超帅动画效果(附demo源码下载)
2016/01/26 Javascript
jQuery Dialog 打开时自动聚焦的解决方法(两种方法)
2016/11/24 Javascript
vue轮播图插件vue-concise-slider的使用
2018/03/13 Javascript
vue watch深度监听对象实现数据联动效果
2018/08/16 Javascript
vue搜索和vue模糊搜索代码实例
2019/05/07 Javascript
JavaScript实现图片轮播特效
2019/10/23 Javascript
js事件机制----捕获与冒泡机制实例分析
2020/05/22 Javascript
压缩包密码破解示例分享(类似典破解)
2014/01/17 Python
python抓取最新博客内容并生成Rss
2015/05/17 Python
用Python实现随机森林算法的示例
2017/08/24 Python
python面试题小结附答案实例代码
2019/04/11 Python
python通用读取vcf文件的类(复制粘贴即可用)
2020/02/29 Python
关于Theano和Tensorflow多GPU使用问题
2020/06/19 Python
Python实现弹球小游戏
2020/08/01 Python
Django如何实现密码错误报错提醒
2020/09/04 Python
英国太阳镜品牌:Taylor Morris Eyewear
2018/04/18 全球购物
英国厨房与餐具用品为主的设计品牌:Joseph Joseph
2018/04/26 全球购物
100%有机精油,美容油:House of Pure Essence
2018/10/30 全球购物
当x.equals(y)等于true时,x.hashCode()与y.hashCode()可以不相等,这句话对不对
2015/05/02 面试题
婚礼主持词
2014/03/13 职场文书
预备党员群众路线教育实践活动思想汇报2014
2014/10/25 职场文书
安全员岗位职责
2015/02/10 职场文书
幼儿园开学家长寄语(2015秋季)
2015/05/27 职场文书
先进基层党组织事迹材料2016
2016/02/29 职场文书
MySQL root密码的重置方法
2021/04/21 MySQL
Java8 CompletableFuture 异步回调
2022/04/28 Java/Android
解决Mysql中的innoDB幻读问题
2022/04/29 MySQL
MySQL的prepare使用以及遇到的bug
2022/05/11 MySQL
Python时间操作之pytz模块使用详解
2022/06/14 Python