根据CLRS第3版中可用的定义,单个连接的有向图是每对顶点(u,v)最多有一条来自u-> v的唯一路径的有向图。现在我读过的大部分答案都说明我们从图中的每个顶点运行DFS,如果在任何情况下我们找到交叉边或前沿,然后图表没有单独连接。我可以理解前沿的概念,但是在这个图上运行这个算法
1 - > 2< -3将给出我们 NOT 单独连接的结果,而该图是单独连接的。我们有一个从3 - >的交叉边缘; 2或1 - > 2取决于哪个椎骨开始整个过程(1或3)。如果我们从顶点2开始DFS,那么我们有2个交叉边 1 - > 2和3 - >任何人都可以澄清一下吗?
答案 0 :(得分:1)
建议从每个节点运行DFS的答案意味着一旦无法继续(没有剩余的传出边缘),就应该停止DFS,而不是从不同的节点开始。
在这种情况下,在你的例子中,你将从1开始(w.l.o),发现2,你就完成了。没有后卫
接下来,是一个全新的DFS,从3开始,发现2,再做完,没有后边缘。
这个想法基本上是按照定义验证属性。您从每个节点u
执行DFS,直到找到每个v
的{{1}}到u
(DFS已耗尽)或您找到的路径为止在某个时刻从v
到u
的第二条路径,然后你就完成了。