我正在尝试解决这个问题:
有n个城市和m个航班。您的任务是检查是否 您可以使用提供的服务从任何城市前往任何其他城市 航班。
输入
第一行输入有两个整数n和m:城市数 和航班。城市编号为1,2,…,n。
此后,有m行描述航班。每行有 两个整数a和b:从城市a到城市b的飞行。所有 航班是单程航班。
我的方法是使dfs植根于每个节点,并跟踪我们访问过的所有节点。然后检查我们是否访问了所有节点。虽然这在n ^ 2中运行。不过这超时了。
有人可以指导我通过更优化的算法吗?
答案 0 :(得分:3)
您确定每个节点都可以与其他节点可达的条件等同于测试图中strongly connected components的数量是否为1。
有高效的众所周知的算法来查找图的强连接组件,例如Kosaraju's algorithm和Tarjan's strongly connected components algorithm,它们都以O( n + <在具有 n 个节点和 m 个边的图上的时间。