📌  相关文章
📜  查询顶点X和Y是否在无向图的相同连接组件中(1)

📅  最后修改于: 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为访问标记数组,xy分别是需要查询的两个节点。如果两个节点在同一连接组件中,则返回True,否则返回False

可以通过以下方式调用same_connected_component(graph, x, y)方法来查询节点xy是否在同一连接组件中。

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更适合于寻找最短路径等问题。