基于python模拟bfs和dfs代码实例


Posted in Python onNovember 19, 2020

BFS

"""
# @Time  : 2020/11/8
# @Author : Jimou Chen
"""


# 广搜
def bfs(graph, start):
  queue = [start] # 先把起点入队列
  visited = set() # 访问国的点加入
  visited.add(start)

  while len(queue):
    vertex = queue.pop(0)
    # 找到队列首元素的连接点
    for v in graph[vertex]:
      if v not in visited:
        queue.append(v)
        visited.add(v)
    # 打印弹出队列的该头元素
    print(vertex, end=' ')


if __name__ == '__main__':
  graph = {
    'A': ['B', 'D', 'I'],
    'B': ['A', 'F'],
    'C': ['D', 'E', 'I'],
    'D': ['A', 'C', 'F'],
    'E': ['C', 'H'],
    'F': ['B', 'H'],
    'G': ['C', 'H'],
    'H': ['E', 'F', 'G'],
    'I': ['A', 'C']
  }

  bfs(graph, 'A')

A B D I F C H E G
Process finished with exit code 0

DFS

"""
# @Time  : 2020/11/8
# @Author : Jimou Chen
"""


# 深搜
def dfs(graph, start):
  stack = [start]
  visited = set()
  visited.add(start)

  while len(stack):
    vertex = stack.pop() # 找到栈顶元素
    for v in graph[vertex]:
      if v not in visited:
        stack.append(v)
        visited.add(v)

    print(vertex, end=' ')


if __name__ == '__main__':
  graph = {
    'A': ['B', 'D', 'I'],
    'B': ['A', 'F'],
    'C': ['D', 'E', 'I'],
    'D': ['A', 'C', 'F'],
    'E': ['C', 'H'],
    'F': ['B', 'H'],
    'G': ['C', 'H'],
    'H': ['E', 'F', 'G'],
    'I': ['A', 'C']
  }

  dfs(graph, 'E')

E H G F B A I D C
Process finished with exit code 0

总结

很明显一个用了队列,一个用了栈

利用python语言优势,只需改动pop即可

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
用Python实现一个简单的多线程TCP服务器的教程
May 05 Python
Python  pip安装lxml出错的问题解决办法
Feb 10 Python
Python编程实现粒子群算法(PSO)详解
Nov 13 Python
python版学生管理系统
Jan 10 Python
python 构造三维全零数组的方法
Nov 12 Python
对python模块中多个类的用法详解
Jan 10 Python
基于python实现操作redis及消息队列
Aug 27 Python
Elasticsearch py客户端库安装及使用方法解析
Sep 14 Python
如何基于Python pygame实现动画跑马灯
Nov 18 Python
解决pycharm修改代码后第一次运行不生效的问题
Feb 06 Python
python绘图subplots函数使用模板的示例代码
Apr 30 Python
python模板入门教程之flask Jinja
Apr 11 Python
Python 多进程、多线程效率对比
Nov 19 #Python
Python导入父文件夹中模块并读取当前文件夹内的资源
Nov 19 #Python
Pytorch实验常用代码段汇总
Nov 19 #Python
Ubuntu配置Pytorch on Graph (PoG)环境过程图解
Nov 19 #Python
python基于pygame实现飞机大作战小游戏
Nov 19 #Python
Python numpy大矩阵运算内存不足如何解决
Nov 19 #Python
python3 os进行嵌套操作的实例讲解
Nov 19 #Python
You might like
excellent!――ASCII Art(由目标图象生成ascii)
2007/02/20 PHP
php URL编码解码函数代码
2009/03/10 PHP
PHP中的常见魔术方法功能作用及用法实例
2015/07/01 PHP
详解Grunt插件之LiveReload实现页面自动刷新(两种方案)
2015/07/31 PHP
简单的php+mysql聊天室实现方法(附源码)
2016/01/05 PHP
php判断电子邮件是否正确方法
2018/12/04 PHP
JQuery中attr方法和removeAttr方法用法实例
2015/05/18 Javascript
jQuery的Ajax用户认证和注册技术实例教程(附demo源码)
2015/12/08 Javascript
js实现商品抛物线加入购物车特效
2020/11/18 Javascript
JS本地刷新返回上一页代码
2016/07/25 Javascript
JS提示:Uncaught SyntaxError:Unexpected token ) 错误的解决方法
2016/08/19 Javascript
浅析上传头像示例及其注意事项
2016/12/14 Javascript
详解JavaScript中this的指向问题
2017/01/20 Javascript
javascript设计模式之中介者模式学习笔记
2017/02/15 Javascript
Bootstrap进度条实现代码解析
2017/03/07 Javascript
基于canvas粒子系统的构建详解
2017/08/31 Javascript
vue仿淘宝订单状态的tab切换效果
2020/06/23 Javascript
vue.js通过路由实现经典的三栏布局实例代码
2018/07/08 Javascript
node中的session的具体使用
2018/09/14 Javascript
JS实现的图片选择顺序切换和循环切换功能示例【测试可用】
2018/12/28 Javascript
mpvue性能优化实战技巧(小结)
2019/04/17 Javascript
微信小程序自定义单项选择器样式
2019/07/25 Javascript
JS call()及apply()方法使用实例汇总
2020/07/11 Javascript
python快速查找算法应用实例
2014/09/26 Python
python中字典(Dictionary)用法实例详解
2015/05/30 Python
Python中的__slots__示例详解
2017/07/06 Python
python TCP Socket的粘包和分包的处理详解
2018/02/09 Python
Selenium chrome配置代理Python版的方法
2018/11/29 Python
Pureology官网:为染色头发打造最好的产品
2019/09/13 全球购物
初三学生评语大全
2014/04/24 职场文书
教师对学生的评语
2014/04/28 职场文书
物流专业自荐信
2014/05/23 职场文书
暑期教师培训方案
2014/06/07 职场文书
推广活动策划方案
2014/08/23 职场文书
酒店管理失职检讨书
2014/09/16 职场文书
MySQL 慢查询日志深入理解
2021/04/22 MySQL