给定一个有向图 G,如何找到一个顶点 v,使得从 v 到 G 中的每个其他顶点都有一条路径?这个算法应该在线性时间内运行。是否存在解决此问题的现有算法?如果不存在,请提供一些见解,以便在线性时间内解决该问题(我只能想到肯定不需要线性时间的解决方案)。
创建一个名为 L 的顶点列表。
选择其中一个顶点,称其为V。从 V 开始遍历图形,在此过程中从列表中移除点,并保留一个未访问的边缘堆栈。当您找到一个循环(您访问的某个顶点不在列表上)时,从堆栈中弹出一条边并继续。
如果堆栈为空且 L 不为空,则从 L 中选择一个新顶点,将其称为 V,并像之前一样继续。
当 L 最终为空时,您最后选择的 V 就是答案。
这可以在边的数量上以线性时间完成。
我认为我得到了正确的答案。
这是充分必要条件。