概述
上一章讲的是用DFS深度优先算法进行强连通分量SCC的检索。这一章采用广度优先算法进行路径规划,最短路的寻找。其中DFS用stack,BFS用queue。DFS在寻找SCC时需要递归调用堆栈,BFS在跑dijkstra时排序需要用heap堆。
Example
实际上我们是在一个二分图上进行操作,左右两边横跨的有几条边,这些边的左侧端点一直也维护了一个Dijkstra greedy score。用横跨边的权值加上左节点维护的score,选择最小的值对应的边,作为我们下一步要探索的边,并更新对应的新节点对应的score和最短路经过的节点。
如果出现负的边,dijkstra算法失效。如果把每个边都加一个正数,会导致不同拓扑长度的边被加正数的次数不一样,导致结果不一样。
Heap Operation
堆就是一个完全二叉树,用来找最大最小值。对于每一个key,他的children都应不小于它。所以越往根部,