📅  最后修改于: 2023-12-03 15:40:35.471000             🧑  作者: Mango
在图论中,连通性是指一个图中的任意两个节点都可以通过路径相连。本文介绍如何检查一个有向图是否连通。
深度优先搜索是一种常用的图搜索算法。通过从起点开始一直深入直到无法深入为止,然后回溯到上一个节点,继续搜索。在有向图中,经过深度优先搜索后,如果连通图中存在未被搜索到的节点,则该图不连通。
def dfs(vertex, graph, visited):
visited[vertex] = True
for neighbor in graph[vertex]:
if not visited[neighbor]:
dfs(neighbor, graph, visited)
def is_graph_connected(graph):
n = len(graph)
visited = [False] * n
dfs(0, graph, visited)
return all(visited)
代码解释:
dfs
函数用于从一个节点开始进行深度优先搜索,并将搜索到的节点标记为已访问。is_graph_connected
函数用于判断一个有向图是否连通。它先将所有节点标记为未访问,然后从起点开始进行深度优先搜索。如果所有节点都被访问到了,则说明该图是连通的。广度优先搜索是另一种常用的图搜索算法。它从起点开始,先将与起点相邻的节点全部加入队列中,然后逐个弹出队首节点进行搜索,直到队列为空为止。在有向图中,经过广度优先搜索后,如果连通图中存在未被搜索到的节点,则该图不连通。
from collections import deque
def bfs(vertex, graph, visited):
q = deque([vertex])
visited[vertex] = True
while q:
cur = q.popleft()
for neighbor in graph[cur]:
if not visited[neighbor]:
q.append(neighbor)
visited[neighbor] = True
def is_graph_connected(graph):
n = len(graph)
visited = [False] * n
bfs(0, graph, visited)
return all(visited)
代码解释:
bfs
函数用于从一个节点开始进行广度优先搜索,并将搜索到的节点标记为已访问。使用了 Python 中的双向队列 deque
。is_graph_connected
函数用于判断一个有向图是否连通。它先将所有节点标记为未访问,然后从起点开始进行广度优先搜索。如果所有节点都被访问到了,则说明该图是连通的。本文介绍了两种判断有向图连通性的算法:深度优先搜索和广度优先搜索。它们在原理上有所不同,但本质上都是通过遍历图中的节点,判断是否能够访问到所有的节点来判断图的连通性。