深度和广度优先递归遍历指定目录(python)

在这里插入图片描述
深度优先搜索

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
深度优先搜索(DFS)和广度优先搜索(BFS)是图遍历中常用的两种算法,它们都可以通过邻接矩阵来实现。 假设我们有一个无向图,其中顶点用数字 0 到 n-1 来标识,邻接矩阵 adjacency_matrix[i][j] 表示顶点 i 和 j 是否有边相连,如果相连则为 1,否则为 0。 1. 深度优先搜索(DFS) DFS 从起始顶点开始遍历,每次访问一个顶点后深入到该顶点的一个未访问过的邻居,直到不能再深入为止,然后回溯到前一个顶点,再深入到另一个未访问过的邻居,直到所有顶点都被访问过。 DFS 可以使用递归来实现: ```python def dfs(adjacency_matrix, visited, vertex): visited[vertex] = True print(vertex, end=" ") for i in range(len(adjacency_matrix)): if adjacency_matrix[vertex][i] and not visited[i]: dfs(adjacency_matrix, visited, i) ``` 其中 visited 是一个布尔数组,表示每个顶点是否被访问过。我们从起始顶点开始遍历,每访问一个顶点就将 visited 中对应的值设为 True,并输出该顶点的编号。然后遍历该顶点的所有邻居,如果邻居未被访问过,则递归访问它。 调用该函数: ```python n = 5 adjacency_matrix = [[0, 1, 1, 0, 0], [1, 0, 1, 1, 0], [1, 1, 0, 0, 1], [0, 1, 0, 0, 1], [0, 0, 1, 1, 0]] visited = [False] * n dfs(adjacency_matrix, visited, 0) ``` 输出结果为:0 1 2 3 4,表示深度优先搜索遍历的顺序。 2. 广度优先搜索(BFS) BFS 从起始顶点开始遍历,先访问与起始顶点相邻的所有顶点,再依次访问与这些顶点相邻的所有未访问过的顶点,直到所有顶点都被访问过。 BFS 可以使用队列来实现: ```python from collections import deque def bfs(adjacency_matrix, visited, vertex): queue = deque([vertex]) visited[vertex] = True while queue: v = queue.popleft() print(v, end=" ") for i in range(len(adjacency_matrix)): if adjacency_matrix[v][i] and not visited[i]: queue.append(i) visited[i] = True ``` 我们使用 deque 来实现队列,将起始顶点入队,并将 visited 中对应的值设为 True。然后进入一个循环,在循环中取出队首元素 v,并输出其编号。接着遍历 v 的所有邻居,如果邻居未被访问过,则将其加入队列并将 visited 中对应的值设为 True。 调用该函数: ```python n = 5 adjacency_matrix = [[0, 1, 1, 0, 0], [1, 0, 1, 1, 0], [1, 1, 0, 0, 1], [0, 1, 0, 0, 1], [0, 0, 1, 1, 0]] visited = [False] * n bfs(adjacency_matrix, visited, 0) ``` 输出结果为:0 1 2 3 4,表示广度优先搜索遍历的顺序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值