我不明白如何使用dfs来检查图中的两个顶点是否连接(不仅可以直接连接,还可以间接连接)。
答案 0 :(得分:0)
让两个顶点分别为source
和destination
。在不失一般性的前提下,它们中的任何一个都可以为source
,另一个为destination
。因此,基本思路是,您从dfs
节点开始执行source
,并保留一个数组以跟踪每个节点的状态(即是否已访问它们)。当无法访问新节点时,dfs
将终止。如果source
和destination
确实已连接,则从dfs
运行source
后,访问数组中destination
节点的状态将被访问(访问状态可以用1
或true
表示)或未访问(0
或false
)。如果已连接,则为1
或true
,否则为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
}
}
}