基于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自然语言处理之词干,词形与最大匹配算法代码详解
Nov 16 Python
浅谈Pandas中map, applymap and apply的区别
Apr 10 Python
PyQt5实现拖放功能
Apr 25 Python
Python运维自动化之nginx配置文件对比操作示例
Aug 29 Python
详解Django的CSRF认证实现
Oct 09 Python
CentOS7安装Python3的教程详解
Apr 10 Python
PyQt5笔记之弹出窗口大全
Jun 20 Python
Django之PopUp的具体实现方法
Aug 31 Python
vscode 配置 python3开发环境的方法
Sep 19 Python
python 数据分析实现长宽格式的转换
May 18 Python
基于Django集成CAS实现流程详解
Nov 28 Python
Pytorch 如何实现常用正则化
May 27 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 无限级分类 获取顶级分类ID
2016/03/13 PHP
thinkPHP数据库增删改查操作方法实例详解
2016/12/06 PHP
JavaScript 大数据相加的问题
2011/08/03 Javascript
根据身份证号自动输出相关信息(籍贯,出身日期,性别)
2013/11/15 Javascript
jquery中EasyUI实现异步树
2015/03/01 Javascript
jquery实现手机号码选号的方法
2015/07/31 Javascript
信息页文内画中画广告js实现代码(文中加载广告方式)
2016/01/03 Javascript
浅析javascript函数表达式
2016/02/10 Javascript
浅谈jQuery animate easing的具体使用方法(推荐)
2016/06/17 Javascript
Vuejs第九篇之组件作用域及props数据传递实例详解
2016/09/05 Javascript
jQuery中checkbox反复调用attr('checked', true/false)只有第一次生效的解决方法
2016/11/16 Javascript
微信小程序 setData的使用方法详解
2017/04/20 Javascript
vue 项目打包通过命令修改 vue-router 模式 修改 API 接口前缀
2018/06/13 Javascript
微信小程序上传图片到php服务器的方法
2019/05/23 Javascript
Vue实现日历小插件
2019/06/26 Javascript
Vue 中如何将函数作为 props 传递给组件的实现代码
2020/05/12 Javascript
Vue组件间数据传递的方式(3种)
2020/07/13 Javascript
[00:36]TI7不朽珍藏III——斯温不朽展示
2017/07/15 DOTA
Python 网络编程起步(Socket发送消息)
2008/09/06 Python
python Django批量导入数据
2016/03/25 Python
python中的迭代和可迭代对象代码示例
2017/12/27 Python
Python运维之获取系统CPU信息的实现方法
2018/06/11 Python
Python判断中文字符串是否相等的实例
2018/07/06 Python
浅谈python3中input输入的使用
2019/08/02 Python
OpenCV模板匹配matchTemplate的实现
2019/10/18 Python
马云的职业生涯规划之路
2014/01/01 职场文书
关于旷工的检讨书
2014/02/02 职场文书
致200米运动员广播稿
2014/02/06 职场文书
家长通知书教师评语
2014/04/17 职场文书
新闻传媒系求职信范文
2014/04/19 职场文书
竞选村长演讲稿
2014/04/28 职场文书
个人安全生产责任书
2014/07/28 职场文书
毕业生自荐信范文
2015/03/05 职场文书
Python机器学习之基础概述
2021/05/19 Python
分析mysql中一条SQL查询语句是如何执行的
2021/06/21 MySQL
Java实现多线程聊天室
2021/06/26 Java/Android