📅  最后修改于: 2023-12-03 14:55:37.837000             🧑  作者: Mango
在一个无向图中,连接组件指的是由连通的节点组成的子集。如果两个点X和Y在一个连接组件中,则说明它们可以通过一系列相邻节点的连通关系互相到达。
要查询两个点是否在相同的连接组件中,可以通过深度优先搜索(DFS)或广度优先搜索(BFS)来实现。以下为DFS实现的代码片段。
# 以邻接矩阵(adjacency matrix)表示图
def dfs(graph, visited, x, y):
visited[x] = True # 标记节点为已访问
if x == y:
return True
for i in range(len(graph)):
if graph[x][i] and not visited[i]:
if dfs(graph, visited, i, y):
return True
return False
def same_connected_component(graph, x, y):
visited = [False] * len(graph) # 初始化所有节点为未访问状态
return dfs(graph, visited, x, y)
以上代码中的graph
参数表示邻接矩阵,visited
为访问标记数组,x
和y
分别是需要查询的两个节点。如果两个节点在同一连接组件中,则返回True
,否则返回False
。
可以通过以下方式调用same_connected_component(graph, x, y)
方法来查询节点x
和y
是否在同一连接组件中。
graph = [[0, 1, 1, 0], # 构建一张邻接矩阵表示的无向图
[1, 0, 0, 1],
[1, 0, 0, 1],
[0, 1, 1, 0]]
connected = same_connected_component(graph, 0, 3) # 查询节点0和节点3是否在同一连接组件中
print(connected) # 应该返回True
以上是DFS实现查询两个节点是否在同一连接组件中的方法。除此之外,BFS也可以实现同样的功能。相比较而言,BFS更适合于寻找最短路径等问题。