python数据结构之图深度优先和广度优先实例详解

下面是详细讲解“Python数据结构之图深度优先和广度优先实例详解”的完整攻略。

1. 什么是图?

图是由节点和边组成的一种数据结构。节点表示图中的元素,边表示节点之间的关系。图可以用来解决各种实际问题,如社交网络、地图等。

2. Python实现图的深度优先和广度优先遍历

2.1 深度优先遍历

下面是Python实现图的深度优先遍历的示例:

def dfs(graph, start, visited=None):
    if visited is None:
        visited = set()
    visited.add(start)
    print(start)
    for next_node in graph[start] - visited:
        dfs(graph, next_node, visited)

graph = {'A': set(['B', 'C']),
         'B': set(['A', 'D', 'E']),
         'C': set(['A', 'F']),
         'D': set(['B']),
         'E': set(['B', 'F']),
         'F': set(['C', 'E'])}

dfs(graph, 'A')

上述代码中,定义了一个dfs函数,用于实现深度优先遍历。首先定义一个集合visited,用于存储已经访问过的节点。然后将起始节点start加入visited集合中,并使用print函数输出该节点。遍历该节点的所有邻居节点,如果邻居节点没有被访问过,则递归调用dfs函数,继续遍邻居节点。最后返回visited集合。

定义一个图graph,使用dfs函数该图进行深度优先遍历,然后使用print函数输出结果。

输出结果为:A B D E F C

2.2 广度优先遍历

下面是Python实现图的广度优先遍历示例:

from collections import deque

def bfs(graph, start):
    visited = set()
    queue = deque([start])
    visited.add(start)
    while queue:
        node = queue.popleft()
        print(node)
        for next_node in graph[node] - visited:
            visited.add(next_node)
            queue.append(next_node)

graph = {'A': set(['B', 'C']),
         'B': set(['A', 'D', 'E']),
         'C': set(['A', 'F']),
         'D': set(['B']),
         'E': set(['B', 'F']),
         'F': set(['C', 'E'])}

bfs(graph, 'A')

上述代码中,定义一个函数bfs,用于实现广度优先遍历。首先定义一个集合visited,用于存已经访问过的节点。然后定义一个队列queue,用于存储待问的节点。将起始节点start加入visited集合和queue队列中。使用while循环,依次将队列中的节点出队,并使用print函数输出该节点。遍历该节点的所有邻居节点,如果邻居没有被访问过,则将其加入visited集合和queue队列中。最后返回visited集合。

定义一个图graph,使用bfs函数对该进行广度优先遍历,然后使用print函数输出结果。

输出结果为: B C D E

3. 总结

图是由节点和边组成的一种数据结构。Python可以使用深度优先遍历和广度优先遍历对图进行遍历。深度优先遍历从某个节点开始,沿着一条路径一直走到底,直到不能再走为止,然后回溯到上一个节点,继续走其他,直到遍历完整个图。广度优先遍历从某个节点开始,先遍历该节点的所有邻居节点,然后再遍邻居节点的邻居节点,直到遍历完整个图。在Python中,可以使用递归和队列等数据结构实现深度优先遍历和广度优先遍历。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python数据结构之图深度优先和广度优先实例详解 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • Python 实现把列表中的偶数变成他的平方

    在Python中,可以使用列表推导式来实现将列表中的偶数变成它的平方。下面将介绍两个示例,分别演示了如何使用列表推导式将列表的偶数变成它的平方。 示例一:将列表中的偶数变成它的平方 # 将列表中的偶数变成它的平方 lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] new_lst = [x**2 if x%2==0 else x fo…

    python 2023年5月13日
    00
  • Django如何使用asyncio协程和ThreadPoolExecutor多线程

    首先需要明确的是,Django本身是不支持asyncio和多线程的,但可以通过结合第三方库来实现对应的功能。 使用asyncio协程的步骤如下: 在views.py中导入asyncio库和asyncio的异步装饰器@asyncio.coroutine 将原本的同步视图函数改为异步函数,并用yield from调用异步函数 在异步函数中使用asyncio.sl…

    python 2023年5月19日
    00
  • 拓扑排序Python实现的过程

    拓扑排序Python实现的过程 拓扑排序是一种常用的有向无环图(DAG)的排序算法,它可以将DAG中的节点按照一定的顺序进行排序。实际应用中,拓扑排序常于任务调度、依赖关系分析等场景。本文将介绍拓扑排序的Python实现过程,并提供两个示例说明。 拓扑排序的实现过程 拓扑排序的实现过程可以分为以下几个步骤: 构建DAG:将有向表示为邻接表或邻接矩阵的形式。 …

    python 2023年5月14日
    00
  • 文件系统变为raw 无法访问的解决方法

    当文件系统变为raw格式时,操作系统无法读取文件系统中的数据。这可能是由于磁盘不正确分区所导致的问题,也可能是因为文件系统损坏、病毒或不当操作所引起的问题。以下是一些可以解决此问题的方法: 方法一:使用命令行工具修复文件系统 打开命令提示符(管理员权限)。 输入命令:chkdsk /f /r X: (X代表出现raw无法访问的磁盘盘符)。该命令会扫描并修复磁…

    python 2023年6月2日
    00
  • python pycharm最新版本激活码(永久有效)附python安装教程

    Python PyCharm 最新版本激活码(永久有效)附 Python 安装教程 简介 Python 是一门广泛使用的高级编程语言,具有简洁明了、易读易懂等特点。PyCharm 是一款由 JetBrains 开发的 Python 集成开发环境(IDE),提供了代码编辑、调试、测试等一系列开发工具,广泛应用于 Python 开发领域。本攻略将详细讲解 PyC…

    python 2023年5月30日
    00
  • python中np.random.permutation函数实例详解

    Python中np.random.permutation函数实例详解 概述 np.random.permutation()函数可以返回一个洗牌后的序列或数组。它的作用类似于shuffle()函数,只是它并不会改变原始序列或数组。 语法 numpy.random.permutation(x) 参数解释: x :表示一个序列或数组,可以是ndarray、list…

    python 2023年5月13日
    00
  • python支持断点续传的多线程下载示例

    下面是对于“python支持断点续传的多线程下载示例”的完整攻略: 背景介绍 在进行大文件下载时,常常需要使用多线程进行下载加速,但是在下载过程中,如果意外终止了下载,那么就需要重新下载。这时候,我们可以使用断点续传的功能,可以在下载被中断后从上次下载的位置继续进行下载。 示例1:使用urllib库实现断点续传 import urllib.request i…

    python 2023年5月19日
    00
  • python 爬虫出现403禁止访问错误详解

    当使用Python进行网络爬虫时,可能会遇到被网站拒绝访问的情况,出现403 Forbidden错误。这种错误是由于目标网站的服务器禁止程序访问或者限制了访问请求的频率。下面是解决这种问题的完整攻略。 1.使用 User-Agent/Header 伪装请求头 许多网站可以检测到其服务器是否被网络爬虫访问,如果检测到则会拒绝访问。因此我们可以使用 User-A…

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部