欢迎访问宙启技术站
智能推送

使用Python实现图的深度优先搜索算法

发布时间:2023-12-04 08:06:03

深度优先搜索(Depth-First Search,DFS)是一种用于遍历或搜索图或树的算法。它从起点开始,沿着一条路径一直走到底,直到不能再继续前进为止,然后返回上一层,并尝试其他的路径,直到遍历完所有的节点。

下面是使用Python实现图的深度优先搜索算法的示例代码:

# 定义图的类
class Graph:
    def __init__(self, vertices):
        self.V = vertices  # 图的顶点个数
        self.adj = [[] for _ in range(self.V)]  # 用邻接表表示图

    # 添加边
    def addEdge(self, u, v):
        self.adj[u].append(v)
        self.adj[v].append(u)

    # 深度优先搜索算法
    def DFS(self, v, visited):
        visited[v] = True  # 标记当前节点为已访问
        print(v, end=' ')  # 输出当前节点
        
        # 递归访问当前节点的邻接节点
        for i in self.adj[v]:
            if visited[i] == False:
                self.DFS(i, visited)

    # 对图进行深度优先搜索
    def dfs(self, v):
        visited = [False] * self.V  # 创建一个用于记录节点访问情况的列表
        self.DFS(v, visited)

# 测试代码
if __name__ == '__main__':
    g = Graph(5)  # 创建一个包含5个节点的图
    g.addEdge(0, 1)
    g.addEdge(0, 2)
    g.addEdge(1, 3)
    g.addEdge(1, 4)
    
    print("深度优先搜索结果:")
    g.dfs(0)

上述代码中,首先定义了一个Graph类来表示图。在__init__方法中,使用邻接表的形式初始化图的顶点个数和邻接表。addEdge方法用于添加边。DFS方法是实现深度优先搜索算法的核心部分,其中v参数表示当前遍历的节点,visited参数用于记录节点的访问情况。dfs方法是对图进行深度优先搜索的入口函数,其中v参数表示起始节点。

在示例代码中,创建一个具有5个节点的图,并添加了一些边。然后调用dfs方法开始进行深度优先搜索,并输出搜索结果。

输出结果:

深度优先搜索结果:
0 1 3 4 2

输出结果中,按照深度优先搜索的顺序,依次输出了访问的节点。

图的深度优先搜索算法可以应用于解决一些问题,比如寻找连通分量,判断是否有环等。并且,深度优先搜索算法还可以用于生成迷宫,求解拓扑排序等。