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之不要红头文件(2)
Sep 28 Python
python实现多线程的方式及多条命令并发执行
Jun 07 Python
在Python程序员面试中被问的最多的10道题
Dec 05 Python
Python比较2个时间大小的实现方法
Apr 10 Python
windows下python和pip安装教程
May 25 Python
python实现串口自动触发工作的示例
Jul 02 Python
Python编程中类与类的关系详解
Aug 08 Python
python 一篇文章搞懂装饰器所有用法(建议收藏)
Aug 23 Python
tensorflow自定义激活函数实例
Feb 04 Python
python 将视频 通过视频帧转换成时间实例
Apr 23 Python
python的flask框架难学吗
Jul 31 Python
手把手教你怎么用Python实现zip文件密码的破解
May 27 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
分享一下贝贝成长进度的php代码
2012/09/14 PHP
PHP错误Warning: Cannot modify header information - headers already sent by解决方法
2014/09/27 PHP
php打包网站并在线压缩为zip
2016/02/13 PHP
Yii 2.0实现联表查询加搜索分页的方法示例
2017/08/02 PHP
javascript之对系统的toFixed()方法的修正
2007/05/08 Javascript
Display SQL Server Login Mode
2007/06/21 Javascript
Javascript结合css实现网页换肤功能
2009/11/02 Javascript
jQuery解决下拉框select设宽度时IE 6/7/8下option超出显示不全
2013/05/27 Javascript
使用JavaScript修改浏览器URL地址栏的实现代码
2013/10/21 Javascript
在JavaScript的jQuery库中操作AJAX的方法讲解
2015/08/15 Javascript
jQuery实现日期联动效果实例
2016/07/26 Javascript
使用JavaScript判断手机浏览器是横屏还是竖屏问题
2016/08/02 Javascript
js入门之Function函数的使用方法【新手必看】
2016/11/22 Javascript
网站申请不到支付宝接口、微信接口,免接口收款实现方式几种解决办法
2016/12/14 Javascript
AngularJS中$injector、$rootScope和$scope的概念和关联关系深入分析
2017/01/19 Javascript
JS中使用 after 伪类清除浮动实例
2017/03/01 Javascript
Bootstrap表单制作代码
2017/03/17 Javascript
js实现图片轮播效果学习笔记
2017/07/26 Javascript
JS扩展String.prototype.format字符串拼接的功能
2018/03/09 Javascript
vue-router history模式下的微信分享小结
2018/07/05 Javascript
解决axios发送post请求返回400状态码的问题
2018/08/11 Javascript
如何使用CSS3和JQuery easing 插件制作绚丽菜单
2019/06/18 jQuery
layui的表单验证支持ajax判断用户名是否重复的实例
2019/09/06 Javascript
js的Object.assign用法示例分析
2020/03/05 Javascript
给Python入门者的一些编程建议
2015/06/15 Python
Python使用bs4获取58同城城市分类的方法
2015/07/08 Python
python flask实现分页效果
2017/06/27 Python
Python爬虫框架Scrapy基本用法入门教程
2018/07/26 Python
Python 使用type来定义类的实现
2019/11/19 Python
Python调用.net动态库实现过程解析
2020/06/05 Python
手把手教你从PyCharm安装到激活(最新激活码),亲测有效可激活至2089年
2020/11/25 Python
一年级班主任感言
2014/03/08 职场文书
校本教研活动总结
2014/07/01 职场文书
企业财务总监岗位职责
2015/04/03 职场文书
2015年采购工作总结
2015/04/10 职场文书
2015年新农村建设指导员工作总结
2015/07/24 职场文书