系统讲述了图中的环路检测方法。
在图论中,环路(或称回路、循环,英文为 "cycle")是指在图中从某个顶点出发,沿着图的边经过一系列顶点,最后回到起始顶点的路径。环路的定义根据图的类型可以有所不同。
一般定义:
无向图中的环路:
有向图中的环路:
DFS
: DFS
遍历,如果有节点有邻居已经被访问过,并且该节点不是当前节点的父节点,那么存在环。在图论中,负权回路(也称为负环)是指一个带权有向图中的回路,其边权值的总和小于零。换句话说,在这个回路中,从某个顶点出发,经过一系列边回到该顶点时,所经过的所有边的权值之和为负数。
负权回路在最短路径问题中非常重要,因为它表明可以通过反复循环回路来无限减小路径权值。在带有负权回路的图中,最短路径问题可能没有解决方案,因为路径的权值可以被无限次降低。
检测的负环的一般思路是在距离更新中找到一条路径,这条路径中包含的节点数目大于图中的节点总数。需要强调的是,这条路径必须是一条距离更新(变小)的路径,因为一般朴素回路都会产生出大于节点总数的一般路径。而负权回路作为负权的发生源,会不断更新回路外节点的可达距离。这里的可达距离是抽象概念,并不相对于某个具体源点。
Bellman-Ford
检测
Spfa
检测
可以总结出