Python递归实现图的广度优先搜索算法
广度优先搜索算法(BFS)是一种在图中搜索节点的算法,它从起点开始,逐层向外遍历节点直到找到目标节点或遍历完整张图。BFS使用队列来实现,每次取出最早加入队列的节点来进行操作。
具体实现过程如下:
- 创建一个队列,用于保存待遍历的节点。
- 将起点节点加入队列,并标记为已访问。
- 从队列中取出第一个未被访问过的节点,如果该节点为目标节点,则返回结果;否则将其所有相邻且未被访问过的节点加入队列中。
- 重复步骤3,直到队列为空。
以下是Python的递归实现演示代码:
class Graph: def __init__(self, vertices): self.V = vertices self.adj = [[] for i in range(vertices)] def add_edge(self, u, v): self.adj[u].append(v) def BFS(self, queue, visited, res): if not queue: return res node = queue.pop(0) res.append(node) for neighbor in self.adj[node]: if not visited[neighbor]: visited[neighbor] = True queue.append(neighbor) return self.BFS(queue, visited, res) def BFS_traversal(self, start): visited = [False] * self.V visited[start] = True queue = [start] res = [] res = self.BFS(queue, visited, res) return res g = Graph(7) g.add_edge(0, 1) g.add_edge(0, 2) g.add_edge(1, 3) g.add_edge(1, 4) g.add_edge(2, 5) g.add_edge(2, 6) print("BFS traversal starting from vertex 0:") res = g.BFS_traversal(0) print(res)
输出结果为:
BFS traversal starting from vertex 0: [0, 1, 2, 3, 4, 5, 6]
此代码演示了从节点0开始的BFS遍历结果。在该图中,节点0连接着节点1和节点2,节点1连接着节点3和节点4,节点2连接着节点5和节点6。因此,遍历结果为[0, 1, 2, 3, 4, 5, 6]。
相关文章