基于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 相关文章推荐
Pandas探索之高性能函数eval和query解析
Oct 28 Python
浅谈flask中的before_request与after_request
Jan 20 Python
Django如何自定义分页
Sep 25 Python
Python实现微信消息防撤回功能的实例代码
Apr 29 Python
python3.7 sys模块的具体使用
Jul 22 Python
Django中使用CORS实现跨域请求过程解析
Aug 05 Python
解决pycharm最左侧Tool Buttons显示不全的问题
Dec 17 Python
如何通过python实现人脸识别验证
Jan 17 Python
Python爬虫抓取论坛关键字过程解析
Oct 19 Python
sublime3之内网安装python插件Anaconda的流程
Nov 10 Python
Python hashlib和hmac模块使用方法解析
Dec 08 Python
Python包管理工具pip的15 个使用小技巧
May 17 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实现模仿socket请求返回页面的方法
2014/11/04 PHP
php集成套件服务器xampp安装使用教程(适合第一次玩PHP的新手)
2015/06/03 PHP
PHP如何使用Memcached
2016/04/05 PHP
thinkphp项目如何自定义微信分享描述内容
2017/02/20 PHP
IE6,IE7下js动态加载图片不显示错误
2010/07/17 Javascript
中文字符串截取的js函数代码
2013/04/17 Javascript
sencha touch 模仿tabpanel导航栏TabBar的实例代码
2013/10/24 Javascript
Jquery中"$(document).ready(function(){ })"函数的使用详解
2013/12/30 Javascript
JavaScript使用push方法添加一个元素到数组末尾用法实例
2015/04/06 Javascript
JavaScript基于setTimeout实现计数的方法
2015/05/08 Javascript
使用RequireJS优化JavaScript引用代码的方法
2015/07/01 Javascript
JS简单去除数组中重复项的方法
2016/09/13 Javascript
JavaScript中数组slice和splice的对比小结
2016/09/22 Javascript
Vue.js实现无限加载与分页功能开发
2016/11/03 Javascript
JS异步加载的三种实现方式
2017/03/16 Javascript
详解vue-resource promise兼容性问题
2017/06/20 Javascript
浅谈Vue3.0之前你必须知道的TypeScript实战技巧
2019/09/11 Javascript
vue不操作dom实现图片轮播的示例代码
2019/12/18 Javascript
js实现验证码功能
2020/07/24 Javascript
python 捕获 shell/bash 脚本的输出结果实例
2017/01/04 Python
详解Python中where()函数的用法
2018/03/27 Python
对pandas里的loc并列条件索引的实例讲解
2018/11/15 Python
对Python生成汉字字库文字,以及转换为文字图片的实例详解
2019/01/29 Python
浅谈Scrapy网络爬虫框架的工作原理和数据采集
2019/02/07 Python
python图像处理模块Pillow的学习详解
2019/10/09 Python
Python函数参数类型及排序原理总结
2019/12/19 Python
Python3.7黑帽编程之病毒篇(基础篇)
2020/02/04 Python
python动态规划算法实例详解
2020/11/22 Python
利用CSS3实现动态的二级三级菜单效果实例源码
2017/01/04 HTML / CSS
加大码胸罩、内裤和服装:Just My Size
2019/03/21 全球购物
char型变量中能不能存贮一个中文汉字
2015/07/08 面试题
六查六看自查材料
2014/02/17 职场文书
员工离职证明范本
2015/06/12 职场文书
聘任书格式及范文
2015/09/21 职场文书
运动会主持人开幕词
2016/03/04 职场文书
导游词之南京中山陵
2019/11/27 职场文书