跳至主要內容
有向图的强联通分量(SCC)Tarjan算法

有向图的强联通分量(SCC)Tarjan算法O(n+m)

强连通分量(Strongly Connected Components,SCC)的定义是:极大的强连通子图。
下图中,子图{1,2,3,4}为一个强连通分量,因为顶点1,2,3,4两两可达。{5},{6}也分别是两个强连通分量。
image.png

DFS生成树:
image-20230725134818030


全民制作人ikun大约 7 分钟Algorithm图论Algorithm图论Tarjan强联通分量
拓扑排序

拓扑排序

给定一个有向无环图(DAG),排出所有顶点的一个序列A满足:对于图中每条有向边(x,y),x在A中都出现在y之前,则A是该图中的顶点的一个拓扑序

拓扑排序可以判断 有向图中是否有环 ,可以生成拓扑序列

Kahn(卡恩)算法

  • e[x]存点x的邻点,res存拓扑序列,d[x]存x的入度

算法流程:核心用队列维护一个入度为0的节点的集合。

  1. 初始化,队列q压入所有入度为0的点;
  2. 每次从q中取出一个点x放入数组res;
  3. 然后将×的所有出边删除。若将边(x,y)删除后,y的入度变为0,则将y压入q中
  4. 不断重复2,3过程,直到队列q为空。
  5. res中的元素个数等于n,则有拓扑序;否则,有环。

全民制作人ikun大约 3 分钟Algorithm图论Algorithm图论拓扑排序
Dijkstra算法求最短路

Dijkstra算法是单源最短路算法,是用来求一个点到其他所有点点最短距离,使用小根堆优化后时间复杂度大概为OmlognOmlogn

注意:不可以解决存在负权边的问题


全民制作人ikun大约 4 分钟Algorithm图论Algorithm图论Dijkstra