确定有向图上的所有顶点对之间是否存在路径

时间:2017-01-22 02:56:23

标签: c++ algorithm graph-theory undirected-graph

问题

我对这个问题有疑问:

给定一个包含N个顶点和M个边的有向图,请确定“从所有1 <= i, j <= N的顶点j到顶点j的路径”。

我想解决N <= 500, M <= 250000
我发现了使用dfs的天真寻路算法,但时间复杂度为O(N^2 M),所以它非常慢。
请告诉我解决它的有效算法。

实施例

例如,如果给出了这个图:

Example Graph

答案是否定的,因为没有从4到1的路径。

1 个答案:

答案 0 :(得分:1)

我可以使用O(N+M)复杂度实现以下算法。

  1. 取任何顶点u。使用flood fill算法到达其他顶点。如果无法访问任何顶点,请返回NOK

  2. 现在也这样做,但转向相反的方向。如果无法访问任何顶点,请返回NOK

  3. 返回OK。 (这里我们知道,由于[2],从任何顶点vu都有一条路径,并且存在从u到任何顶点w的路径,因为[1])。