如何检查图中的所有节点是否可以从所有其他节点访问到?

时间:2019-12-04 20:37:18

标签: algorithm graph

我正在尝试解决这个问题:

  

有n个城市和m个航班。您的任务是检查是否   您可以使用提供的服务从任何城市前往任何其他城市   航班。

     

输入

     

第一行输入有两个整数n和m:城市数   和航班。城市编号为1,2,…,n。

     

此后,有m行描述航班。每行有   两个整数a和b:从城市a到城市b的飞行。所有   航班是单程航班。

我的方法是使dfs植根于每个节点,并跟踪我们访问过的所有节点。然后检查我们是否访问了所有节点。虽然这在n ^ 2中运行。不过这超时了。

有人可以指导我通过更优化的算法吗?

1 个答案:

答案 0 :(得分:3)

您确定每个节点都可以与其他节点可达的条件等同于测试图中strongly connected components的数量是否为1。

有高效的众所周知的算法来查找图的强连接组件,例如Kosaraju's algorithmTarjan's strongly connected components algorithm,它们都以O( n + <在具有 n 个节点和 m 个边的图上的时间。