Kosaraju 算法

引入

Kosaraju 算法用于求解强连通分量,在稠密图下复杂度会比 tarjan 算法要优秀。(?

过程

  1. 对整个图进行搜索,并且将没一个顶点按照 DFS 序压入栈中。

  2. 建一个反图。

  3. 对于栈中的每一个点再反图上跑一遍 DFS,现在跑出来的子图即为一个强连通分量。

  4. 标记这几个点。

  5. 重复执行操作3,4,直到栈为空。

code

复杂度

其最坏情况就是每个点和每一条边都需要进行两次 DFS,这样子的复杂度为 \(O(N + E)\)\(N\) 为点数,\(E\) 为边数。但是一般都是跑不满的。

在稠密图上表现良好,个人认为这个算法会比 tarjan 好写许多。

posted @ 2024-05-03 21:58  sqrtqwq  阅读(7)  评论(0编辑  收藏  举报