Python数据结构与算法之图的广度优先与深度优先搜索算法示例


Posted in Python onDecember 14, 2017

本文实例讲述了Python数据结构与算法之图的广度优先与深度优先搜索算法。分享给大家供大家参考,具体如下:

根据维基百科的伪代码实现:

广度优先BFS:

使用队列集合

标记初始结点已被发现,放入队列

每次循环从队列弹出一个结点

将该节点的所有相连结点放入队列,并标记已被发现

通过队列,将迷宫路口所有的门打开,从一个门进去继续打开里面的门,然后返回前一个门处

"""
 procedure BFS(G,v) is
   let Q be a queue
   Q.enqueue(v)
   label v as discovered
   while Q is not empty
    v ← Q.dequeue()
    procedure(v)
    for all edges from v to w in G.adjacentEdges(v) do
      if w is not labeled as discovered
        Q.enqueue(w)
        label w as discovered
"""
def procedure(v):
  pass
def BFS(G,v0):
  """ 广度优先搜索 """
  q, s = [], set()
  q.extend(v0)
  s.add(v0)
  while q:  # 当队列q非空
    v = q.pop(0)
    procedure(v)
    for w in G[v]:   # 对图G中顶点v的所有邻近点w
      if w not in s: # 如果顶点 w 没被发现
        q.extend(w)
        s.add(w)  # 记录w已被发现

深度优先DFS

使用 集合

初始结点入栈

每轮循环从栈中弹出一个结点,并标记已被发现

对每个弹出的结点,将其连接的所有结点放到队列中

通过栈的结构,一步步深入挖掘

""""
Pseudocode[edit]
Input: A graph G and a vertex v of G
Output: All vertices reachable from v labeled as discovered
A recursive implementation of DFS:[5]
1 procedure DFS(G,v):
2   label v as discovered
3   for all edges from v to w in G.adjacentEdges(v) do
4     if vertex w is not labeled as discovered then
5       recursively call DFS(G,w)
A non-recursive implementation of DFS:[6]
1 procedure DFS-iterative(G,v):
2   let S be a stack
3   S.push(v)
4   while S is not empty
5      v = S.pop()
6      if v is not labeled as discovered:
7        label v as discovered
8        for all edges from v to w in G.adjacentEdges(v) do
9          S.push(w)
"""
def DFS(G,v0):
  S = []
  S.append(v0)
  label = set()
  while S:
    v = S.pop()
    if v not in label:
      label.add(v)
      procedure(v)
      for w in G[v]:
        S.append(w)

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python生成指定长度的随机数密码
Jan 23 Python
Python程序员鲜为人知但你应该知道的17个问题
Jun 04 Python
python中os操作文件及文件路径实例汇总
Jan 15 Python
详解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别
Jun 23 Python
python实现感知器
Dec 19 Python
对Python3.6 IDLE常用快捷键介绍
Jul 16 Python
python使用pygame框架实现推箱子游戏
Nov 20 Python
Python实现二叉树的常见遍历操作总结【7种方法】
Mar 06 Python
python障碍式期权定价公式
Jul 19 Python
自学python用什么系统好
Jun 23 Python
Keras预训练的ImageNet模型实现分类操作
Jul 07 Python
Python Celery异步任务队列使用方法解析
Aug 10 Python
python实现发送邮件功能代码
Dec 14 #Python
python正则实现计算器功能
Dec 14 #Python
Python数据结构与算法之使用队列解决小猫钓鱼问题
Dec 14 #Python
python实现BackPropagation算法
Dec 14 #Python
python实现随机梯度下降(SGD)
Mar 24 #Python
Python实现将一个正整数分解质因数的方法分析
Dec 14 #Python
Python随机生成均匀分布在三角形内或者任意多边形内的点
Dec 14 #Python
You might like
Mysql的常用命令
2006/10/09 PHP
dede3.1分页文字采集过滤规则详说(图文教程)
2007/04/03 PHP
解析PHP中$_FILES的使用以及注意事项
2013/07/05 PHP
PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法
2014/06/26 PHP
php实现改变图片直接打开为下载的方法
2015/04/14 PHP
zend framework重定向方法小结
2016/05/28 PHP
PHP+MySQL实现消息队列的方法分析
2018/05/09 PHP
PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
2019/12/13 PHP
jquery连缀语法如何实现
2012/11/29 Javascript
JS实现图片横向滚动效果示例代码
2013/09/04 Javascript
JQuery中的事件及动画用法实例
2015/01/26 Javascript
简单介绍JavaScript的变量和数据类型
2015/06/03 Javascript
实用jquery操作表单元素的简单代码
2016/07/04 Javascript
利用JavaScript阻止表单提交的两种方法
2016/08/11 Javascript
AngularJS通过ng-Img-Crop实现头像截取的示例
2017/08/17 Javascript
js数组去重的N种方法(小结)
2018/06/07 Javascript
JS实现数组去重,显示重复元素及个数的方法示例
2019/01/21 Javascript
vue Tab切换以及缓存页面处理的几种方式
2019/11/05 Javascript
layui清除radio的选中状态实例
2019/11/14 Javascript
解决echarts echarts数据动态更新和dataZoom被重置问题
2020/07/20 Javascript
解决vuex数据页面刷新后初始化操作
2020/07/26 Javascript
JavaScript 判断数据类型的4种方法
2020/09/11 Javascript
[48:38]DOTA2亚洲邀请赛 3.31 小组赛 B组 Mineski vs Secret
2018/03/31 DOTA
详解Python字符串对象的实现
2015/12/24 Python
python实现在IDLE中输入多行的方法
2018/04/19 Python
Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解
2020/02/12 Python
jupyter notebook中新建cell的方法与快捷键操作
2020/04/22 Python
浅谈Python中文件夹和python package包的区别
2020/06/01 Python
python批量合成bilibili的m4s缓存文件为MP4格式 ver2.5
2020/12/01 Python
Pandas数据分析的一些常用小技巧
2021/02/07 Python
英国时尚家具、家居饰品及礼品商店:Graham & Green
2016/09/15 全球购物
毕业实习指导教师评语
2014/12/31 职场文书
婚前保证书范文
2015/02/28 职场文书
MySQL索引篇之千万级数据实战测试
2021/04/05 MySQL
HTML5 新增内容和 API详解
2021/11/17 HTML / CSS
Python开发五子棋小游戏
2022/05/02 Python