基于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 logging模块学习笔记
May 24 Python
Python中实现三目运算的方法
Jun 21 Python
编写Python脚本抓取网络小说来制作自己的阅读器
Aug 20 Python
Python中函数参数设置及使用的学习笔记
May 03 Python
Python实现端口检测的方法
Jul 24 Python
解决django前后端分离csrf验证的问题
Feb 03 Python
python把转列表为集合的方法
Jun 28 Python
python字符串切割:str.split()与re.split()的对比分析
Jul 16 Python
python openCV获取人脸部分并存储功能
Aug 28 Python
python+Selenium自动化测试——输入,点击操作
Mar 06 Python
python爬取音频下载的示例代码
Oct 19 Python
Python Pandas list列表数据列拆分成多行的方法实现
Dec 14 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
利用ThinkPHP内置的ThinkAjax实现异步传输技术的实现方法
2011/12/19 PHP
解析php中如何直接执行SHELL
2013/06/28 PHP
php用户注册页面利用js进行表单验证具体实例
2013/10/17 PHP
php实现四舍五入的方法小结
2015/03/03 PHP
CentOS 安装 PHP5.5+Redis+XDebug+Nginx+MySQL全纪录
2015/03/25 PHP
PHP严重致命错误处理:php Fatal error: Cannot redeclare class or function
2017/02/05 PHP
javascript 面向对象编程基础:继承
2009/08/21 Javascript
用JavaScript对JSON进行模式匹配(Part 1-设计)
2010/07/17 Javascript
js实现addClass,removeClass,hasClass的函数代码
2011/07/13 Javascript
用按钮控制iframe显示的网页实现方法
2013/02/04 Javascript
JavaScript italics方法入门实例(把字符串显示为斜体)
2014/10/17 Javascript
javascript实现捕捉键盘上按下的键
2015/05/05 Javascript
javascript实现tab切换的两个实例
2015/11/05 Javascript
有关jQuery中parent()和siblings()的小问题
2016/06/01 Javascript
jQuery css() 方法动态修改CSS属性
2016/09/25 Javascript
JS正则表达式验证密码格式的集中情况总结
2017/02/23 Javascript
Spring Boot+AngularJS+BootStrap实现进度条示例代码
2017/03/02 Javascript
浅析为什么a="abc" 不等于 a=new String("abc")
2017/10/25 Javascript
Vue项目全局配置页面缓存之按需读取缓存的实现详解
2018/08/01 Javascript
node.js中ws模块创建服务端和客户端,网页WebSocket客户端
2019/03/06 Javascript
详解Node.js异步处理的各种写法
2019/06/09 Javascript
微信小程序纯文本实现@功能
2020/04/08 Javascript
微信小程序订阅消息(java后端实现)开发
2020/06/01 Javascript
uin-app+mockjs实现本地数据模拟
2020/08/26 Javascript
[02:07]DOTA2超级联赛专访BBC:难忘网吧超神经历
2013/06/09 DOTA
[04:39]显微镜下的DOTA2第十三期—Pis卡尔个人秀
2014/04/04 DOTA
Python程序运行原理图文解析
2018/02/10 Python
Python如何将模块打包并发布
2020/08/30 Python
java关于string最常出现的面试题整理
2021/01/18 Python
你常见到的runtime exception
2016/09/05 面试题
党员个人查摆剖析材料
2014/10/16 职场文书
政审证明范文
2015/06/19 职场文书
军训新闻稿范文
2015/07/17 职场文书
《圆的面积》教学反思
2016/02/19 职场文书
python实现简单反弹球游戏
2021/04/12 Python
pytorch中的model=model.to(device)使用说明
2021/05/24 Python