震惊!Python 图结构竟然可以这样玩?DFS&BFS 遍历技巧大公开

简介: 在 Python 编程中,图是一种重要的数据结构,而深度优先搜索(DFS)和广度优先搜索(BFS)是遍历图的两种关键算法。本文将通过定义图的数据结构、实现 DFS 和 BFS 算法,并通过具体示例展示其应用,帮助读者深入理解这两种算法。DFS 适用于寻找路径和检查图连通性,而 BFS 适用于寻找最短路径。掌握这些技巧,可以更高效地解决与图相关的复杂问题。

Python 编程中,图是一种非常重要的数据结构,而深度优先搜索(DFS)和广度优先搜索(BFS)是遍历图的两种重要算法。下面将以最佳实践的方式为您详细介绍。

首先,让我们来定义一个图的数据结构。可以使用邻接表或者邻接矩阵来表示图。这里我们使用邻接表来实现。

class Graph:
    def __init__(self):
        self.graph = {
   }

    def add_edge(self, u, v):
        if u in self.graph:
            self.graph[u].append(v)
        else:
            self.graph[u] = [v]

        if v not in self.graph:
            self.graph[v] = []

接下来,实现 DFS 算法。

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

再看 BFS 算法的实现。

from collections import deque

def bfs(graph, start):
    visited = {
   start}
    queue = deque([start])

    while queue:
        vertex = queue.popleft()
        print(vertex)

        for neighbor in graph[vertex]:
            if neighbor not in visited:
                visited.add(neighbor)
                queue.append(neighbor)

下面通过一个具体的例子来展示这两种算法的应用。

假设我们有一个图,顶点为 1 到 5,边为 (1, 2), (1, 3), (2, 4), (2, 5) 。

g = Graph()
g.add_edge(1, 2)
g.add_edge(1, 3)
g.add_edge(2, 4)
g.add_edge(2, 5)

print("DFS 遍历:")
dfs(g.graph, 1)

print("BFS 遍历:")
bfs(g.graph, 1)

在实际应用中,DFS 常用于寻找路径、检查图是否连通等问题。例如,在迷宫问题中,可以使用 DFS 来寻找从起点到终点的路径。

BFS 则常用于寻找最短路径问题。比如,在地图导航中,BFS 可以更快地找到两点之间的最短路径。

总之,掌握 DFS 和 BFS 这两种图的遍历技巧,能够让我们更高效地处理各种与图相关的问题,为解决复杂的实际问题提供有力的工具。

不知上述内容是否符合您的预期,如果还需要对文章进行修改或补充,请随时告诉我。

相关文章
|
2月前
|
Python
不容错过!Python中图的精妙表示与高效遍历策略,提升你的编程艺术感
本文介绍了Python中图的表示方法及遍历策略。图可通过邻接表或邻接矩阵表示,前者节省空间适合稀疏图,后者便于检查连接但占用更多空间。文章详细展示了邻接表和邻接矩阵的实现,并讲解了深度优先搜索(DFS)和广度优先搜索(BFS)的遍历方法,帮助读者掌握图的基本操作和应用技巧。
44 4
|
2月前
|
算法 Python
Python图论探索:从理论到实践,DFS与BFS遍历技巧让你秒变技术大牛
图论在数据结构与算法中占据重要地位,应用广泛。本文通过Python代码实现深度优先搜索(DFS)和广度优先搜索(BFS),帮助读者掌握图的遍历技巧。DFS沿路径深入搜索,BFS逐层向外扩展,两者各具优势。掌握这些技巧,为解决复杂问题打下坚实基础。
44 2
|
7月前
|
移动开发 Unix Linux
Python 遍历文件每一行判断是否只有一个换行符详解
**Python 检查文件每行换行符:** 文章探讨了在Python中验证文件每行是否仅含一个换行符的需求。通过提供代码示例,展示了如何打开文件,遍历行,判断行尾的换行情况。基础实现检查`\n`,扩展版考虑了`\r\n`,并可选地将结果保存至新文件。这些功能有助于确保数据格式规范。
|
4月前
|
数据处理 Python
python遍历文件夹所有文件按什么排序
python遍历文件夹所有文件按什么排序
34 0
|
4月前
|
数据处理 Python
Python遍历文件夹所有文件并按指定排序
Python遍历文件夹所有文件并按指定排序
109 0
|
7月前
|
IDE 开发工具 Python
使用python3遍历文件夹并将文件目录保存到指定文件
使用python3遍历文件夹并将文件目录保存到指定文件
|
8月前
|
JSON JavaScript 数据格式
python遍历目录文件_结合vue获取所有的html文件并且展示
python遍历目录文件_结合vue获取所有的html文件并且展示
42 0
|
8月前
|
定位技术 索引 Python
Python遍历多个子文件夹并基于文件名特征将文件复制到不同的目标文件夹
Python遍历多个子文件夹并基于文件名特征将文件复制到不同的目标文件夹
|
8月前
|
Serverless 定位技术 数据格式
Python遍历大量表格文件并筛选出表格内数据缺失率低的文件
Python遍历大量表格文件并筛选出表格内数据缺失率低的文件
|
Linux Python
一日一技:在 Python 中快速遍历文件
一日一技:在 Python 中快速遍历文件
259 0