求第k短路径

首先,我们运用dij等算法能较易得到最短路,但如果要求s到t的第k短路呢?

明显,这里需要用到搜索,需要从小往大搜索s到t的路径

我们运用A*算法,即f(n)=g(n)+h(n),引入i节点到t的最短路径作为h(i),我们运用SPFA算法处理出h(i),g(n)则为s到i节点的实际距离,我们在优先队列中压入s节点,依据边更新g(n)与h(n),当n=t时,h(n)=0,f(n)=g(n),我们知道f(n)最小的路径总是最先得到,故我们取第k次搜索到t的实际距离,即为答案

注意:优先队列中通过估计距离来维护

第一次求最短路要用反向边

我们也由此看出A*的优势,可以依次求出第k优解