可达到的顶点彼此

时间:2013-03-30 07:21:34

标签: graph

给定有向图,我需要找到所有顶点v,这样,如果u可以从v到达,那么v也可以从u到达。我知道,顶点可以使用BFS或DFS查找,但似乎效率低下。我想知道是否有更好的解决方案来解决这个问题。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

从根本上说,你不会做任何比某种搜索更好的事情(正如你所提到的)。我不会太担心效率:这些算法通常在节点数+边数上是线性的。

这个问题有点不明确,所以我会对你的数据结构做一些假设:

  1. 你知道顶点你(因为你没有要求找到它)
  2. 您可以迭代节点的入站和出站边缘(高效)
  3. 您可以迭代图中的所有节点
  4. 您可以(有效地)将几个数据与每个节点相关联
  5. 在这种情况下,使用从顶点u开始的方便搜索(深度/宽度,无关紧要)两次:一次跟随出站边缘(将节点标记为“可从u到达”)并且一次跟随入站边缘(标记节点为“到达你”)。最后,遍历所有节点并根据您的目的比较这两个位。

    注意:如图所示,您的结果集包括所有未到达顶点的节点。如果您打算使用连接而不是暗示,那么您可以通过在第二次搜索中合并测试来节省一点时间,而不是扫描图中的所有节点。这也减轻了假设3。