我们如何使用深度优先搜索来检查是否连接了2个顶点?

时间:2019-06-04 16:16:56

标签: depth-first-search

我不明白如何使用dfs来检查图中的两个顶点是否连接(不仅可以直接连接,还可以间接连接)。

1 个答案:

答案 0 :(得分:0)

让两个顶点分别为sourcedestination。在不失一般性的前提下,它们中的任何一个都可以为source,另一个为destination。因此,基本思路是,您从dfs节点开始执行source,并保留一个数组以跟踪每个节点的状态(即是否已访问它们)。当无法访问新节点时,dfs将终止。如果sourcedestination确实已连接,则从dfs运行source后,访问数组中destination节点的状态将被访问(访问状态可以用1true表示)或未访问(0false)。如果已连接,则为1true,否则为0。这不仅适用于destination,而且还适用于所有其他节点。

visited[n] --> n nodes, 0 to n - 1,  initialize with 0 or false values

dfs(int source){
    visited[source] = true;
    for(int node : adjacencyList[source]){
        if(!visited[node]){
            dfs(node);
        }
    }
}

connected(source){
    dfs(source);
    for(int i = 0 ; i < n ; ++i){
        if(!visited[i]){
            // source and i are not connected
        }
    }
}