基于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创建模块及模块导入的方法
May 27 Python
python查找指定具有相同内容文件的方法
Jun 28 Python
详解Python的Lambda函数与排序
Oct 25 Python
在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例
Jan 29 Python
python使用selenium实现批量文件下载
Mar 11 Python
python解压TAR文件至指定文件夹的实例
Jun 10 Python
pytorch 自定义数据集加载方法
Aug 18 Python
Python 网络编程之UDP发送接收数据功能示例【基于socket套接字】
Oct 11 Python
python读取Kafka实例
Dec 23 Python
Python列表list操作相关知识小结
Jan 29 Python
python中字典增加和删除使用方法
Sep 30 Python
PyTorch梯度裁剪避免训练loss nan的操作
May 24 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
杏林同学录(五)
2006/10/09 PHP
php 应用程序安全防范技术研究
2009/09/25 PHP
PHP实现读取一个1G的文件大小
2013/08/24 PHP
thinkphp3.2中Lite文件替换框架入口文件或应用入口文件的方法
2015/05/21 PHP
thinkphp框架实现删除和批量删除
2016/06/29 PHP
php实现支持中文的文件下载功能示例
2017/08/30 PHP
yii2多图上传组件的使用教程
2018/05/10 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
2020/03/26 PHP
图片完美缩放
2006/09/07 Javascript
彻底搞懂JS无缝滚动代码
2007/01/03 Javascript
项目实践之javascript技巧
2007/12/06 Javascript
functional继承模式 摘自javascript:the good parts
2011/06/20 Javascript
jquery formValidator插件ajax验证 内容不做任何修改再离开提示错误的bug解决方法
2013/01/04 Javascript
Javascript模块化编程(三)require.js的用法及功能介绍
2013/01/17 Javascript
js动态给table添加/删除tr的方法
2013/08/02 Javascript
JS去除字符串两端空格的简单实例
2013/12/27 Javascript
Javascript中引用示例介绍
2014/02/21 Javascript
jQuery仿360导航页图标拖动排序效果代码分享
2015/08/24 Javascript
深入理解JavaScript中的预解析
2017/01/04 Javascript
js中数组插入、删除元素操作的方法
2017/02/15 Javascript
vue之数据交互实例代码
2017/06/20 Javascript
微信小程序获取微信运动步数的实例代码
2017/07/20 Javascript
Vue Cli与BootStrap结合实现表格分页功能
2017/08/18 Javascript
vue写一个组件
2018/04/09 Javascript
jQuery实现的页面详情展开收起功能示例
2018/06/11 jQuery
Javascript原生ajax请求代码实例
2020/02/20 Javascript
解析Python中的变量、引用、拷贝和作用域的问题
2015/04/07 Python
Python中字符串格式化str.format的详细介绍
2017/02/17 Python
python模块之paramiko实例代码
2018/01/31 Python
Python实现AI换脸功能
2020/04/10 Python
完美解决python针对hdfs上传和下载的问题
2020/06/05 Python
canvas离屏技术与放大镜实现代码示例
2018/08/31 HTML / CSS
Html5 new XMLHttpRequest()监听附件上传进度
2021/01/14 HTML / CSS
新西兰最大的天然保健及护肤品网站:HealthPost(直邮中国)
2021/02/13 全球购物
java基础——多线程
2021/07/03 Java/Android
唤醒紫霞仙子,携手再游三界!大话手游X《大话西游》电影合作专属剧情任务
2022/04/03 其他游戏