基于python模拟bfs和dfs代码实例

 更新时间:2020年11月19日 10:43:43   作者:Neaya  
这篇文章主要介绍了基于python模拟bfs和dfs代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

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调整PDF文档页边距的方法小结

    Python调整PDF文档页边距的方法小结

    PDF 文档中的边距是指环绕每页内容的空白区域,充当文本或图像与页面边缘之间的缓冲区,本文将介绍如何使用 Spire.PDF for Python 修改 PDF 文档的页边距,为不同使用场景定制合适的文档布局,需要的朋友可以参考下
    2024-05-05
  • 在CentOS7下安装Python3教程解析

    在CentOS7下安装Python3教程解析

    这篇文章主要介绍了在CentOS7下安装Python3教程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Python教程之生产者消费者模式解析

    Python教程之生产者消费者模式解析

    在并发编程中使用生产者和消费者模式能够解决大不多的并发问题。该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度
    2021-09-09
  • pytorch numpy list类型之间的相互转换实例

    pytorch numpy list类型之间的相互转换实例

    今天小编就为大家分享一篇pytorch numpy list类型之间的相互转换实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • python中dict使用方法详解

    python中dict使用方法详解

    这篇文章主要介绍了python中dict使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • python爬虫入门教程之点点美女图片爬虫代码分享

    python爬虫入门教程之点点美女图片爬虫代码分享

    这篇文章主要介绍了python爬虫入门教程之点点美女图片爬虫代码分享,本文以采集抓取点点网美女图片为例,需要的朋友可以参考下
    2014-09-09
  • python调用接口的4种方式代码实例

    python调用接口的4种方式代码实例

    这篇文章主要介绍了python调用接口的4种方式代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Python爬虫动态IP代理使用及防止被封的方法

    Python爬虫动态IP代理使用及防止被封的方法

    在进行网络爬虫时,经常会遇到网站的反爬机制,其中之一就是通过IP封禁来限制爬虫的访问,为了规避这种限制,使用动态IP代理是一种有效的方法,本文将介绍在Python爬虫中如何使用动态IP代理,以及一些防止被封的方法,文中有详细的代码讲解,需要的朋友可以参考下
    2023-11-11
  • 利用python写api接口实战指南

    利用python写api接口实战指南

    api接口在我们开发中的重要性相信大家都这篇文章主要给大家介绍了关于利用python写api接口实战的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • 详解Python中的枚举类型

    详解Python中的枚举类型

    枚举(Enum)是一种数据类型,是绑定到唯一值的符号表示。。本文就来和大家聊聊Python中的枚举类型,为什么需要枚举类型,及如何使用
    2022-08-08

最新评论