基于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的字典和列表的使用中一些需要注意的地方
Apr 24 Python
在Python中操作日期和时间之gmtime()方法的使用
May 22 Python
Django查找网站项目根目录和对正则表达式的支持
Jul 15 Python
python去掉空白行的多种实现代码
Mar 19 Python
Python3实现的字典遍历操作详解
Apr 18 Python
python将视频转换为全字符视频
Apr 26 Python
Python实现字典按key或者value进行排序操作示例【sorted】
May 03 Python
Python如何把多个PDF文件合并代码实例
Feb 13 Python
python中的socket实现ftp客户端和服务器收发文件及md5加密文件
Apr 01 Python
python自定义函数def的应用详解
Jun 03 Python
python 如何利用argparse解析命令行参数
Sep 11 Python
使用Selenium实现微博爬虫(预登录、展开全文、翻页)
Apr 13 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
PHP开发不能违背的安全规则 过滤用户输入
2011/05/01 PHP
PDO的安全处理与事物处理方法
2016/10/31 PHP
基于jquery的点击链接插入链接内容的代码
2012/07/31 Javascript
鼠标经过tr时,改变tr当前背景颜色
2014/01/13 Javascript
node.js操作mongoDB数据库示例分享
2014/11/26 Javascript
JS实现从表格中动态删除指定行的方法
2015/03/31 Javascript
完美兼容多浏览器的js判断图片路径代码汇总
2015/04/17 Javascript
javascript如何操作HTML下拉列表标签
2015/08/20 Javascript
jQuery中cookie插件用法实例分析
2015/12/04 Javascript
详解Bootstrap按钮
2016/01/04 Javascript
AngularJS单选框及多选框实现双向动态绑定
2016/01/13 Javascript
探讨JavaScript标签位置的存放与功能有无关系
2016/01/15 Javascript
JavaScript简单获取页面图片原始尺寸的方法
2016/06/21 Javascript
老生常谈onBlur事件与onfocus事件(js)
2016/07/09 Javascript
jQuery密码强度验证控件使用详解
2017/01/05 Javascript
JS图片延迟加载插件LazyImgv1.0用法分析【附demo源码下载】
2017/09/04 Javascript
bootstrap轮播模板使用方法详解
2017/11/17 Javascript
解决vue-cli脚手架打包后vendor文件过大的问题
2018/09/27 Javascript
自定义javascript验证框架示例【附源码下载】
2019/05/31 Javascript
JavaScript修改注册表实例代码
2020/01/05 Javascript
Sublime Text3 配置 NodeJs 环境的方法
2020/05/20 NodeJs
[01:43]3.19DOTA2发布会 三代刀塔人第三代
2014/03/25 DOTA
[04:29]【TI9采访】OG.N0tail在胜者组决赛后接受采访
2019/08/25 DOTA
Python编程中的for循环语句学习教程
2015/10/14 Python
Python3一行代码实现图片文字识别的示例
2018/01/15 Python
用python 实现在不确定行数情况下多行输入方法
2019/01/28 Python
详解Python Matplotlib解决绘图X轴值不按数组排序问题
2019/08/05 Python
Python如何用filter函数筛选数据
2020/03/05 Python
css3之UI元素状态伪类选择器实例演示
2017/08/11 HTML / CSS
如何将整数int转换成字串String
2014/03/21 面试题
聚美优品广告词改编
2014/03/14 职场文书
2014群众路线学习笔记
2014/11/06 职场文书
员工家属慰问信
2015/03/24 职场文书
2015年医院创卫工作总结
2015/04/22 职场文书
智慧人生:永远不需要向任何人解释你自己
2019/08/20 职场文书
python中字符串String及其常见操作指南(方法、函数)
2022/04/06 Python