algorithm - 如何检查图中的所有节点是否可以从所有其他节点访问?
问题描述
我正在尝试解决这个问题:
有 n 个城市和 m 个航班连接。您的任务是检查您是否可以使用可用航班从任何城市前往任何其他城市。
输入
第一个输入行有两个整数 n 和 m:城市数和航班数。城市编号为 1,2,…,n。
在此之后,有 m 行描述航班。每行有两个整数 a 和 b:有一个从城市 a 到城市 b 的航班。所有航班均为单程航班。
我的方法是在每个节点上做一个 dfs,跟踪我们访问过的所有节点。然后检查我们是否访问了所有节点。不过,这在 n^2 中运行。不过这超时了。
有人可以指导我通过更优化的算法吗?
解决方案
您的每个节点都可以从其他每个节点到达的标准等同于测试图中强连通分量的数量是否为 1。
有一些众所周知的高效算法可以找到图的强连通分量,例如Kosaraju 的算法和Tarjan 的强连通分量算法,它们都在具有n 个节点和m个边的图上运行 O( n + m ) 时间。
推荐阅读
- python - 我收到错误 AttributeError: 'Series' object has no attribute 'split'
- javascript - Javascript 函数无法更新 html 中的值(跨度 id)
- matlab - 在 MATLAB 的输出中得到 [0 x1 double] 的含义和原因是什么?
- python - 如果列包含非 alpha 值,则删除 pandas 行
- javascript - 使用 JavaScript 构建 SVG 图标
- flutter - Obx 不工作 - Flutter Getx 包
- c# - 在 C# WinForm 中的窗口后面截屏
- c - 在 C 中使用“框模糊”技术模糊 image.bmp
- flutter - 当用户未登录时,颤动重定向到登录小部件(有状态类)?
- python - 如何让循环创建函数?