4 Graph
单源次短路径
非严格次短路
在理解最短路和最长路的概念后,次短路的概念可定义为:除最短路之外的最短路径(允许与最短路长度相等)。
本文仅介绍一种常用方法,A*算法可用于求解K短路问题,因复杂度较高暂不展开。次短路的求解依赖于最短路的结果,需首先计算出最短路。
次短路的长度必然大于或等于最短路长度。通过分析可知,次短路至少存在一条边不属于最短路径(可能与最短路径无交集)。基于此特性,求解次短路的思路为:记录最短路径中的边,依次删除最短路径中的每条边后重新计算最短路,通过比较所有结果得到次短路。以下通过例题具体说明:
例题:集合位置
该问题为次短路的典型模板题。解题步骤如下:
1、首先构建图结构(注意使用双精度浮点型存储边权及结果,并进行精度处理)
2、然后执行“计算最短路→记录路径→枚举删除路径边并重新计算最短路→处理结果”的流程。
需注意特殊情况处理:若存在多条最短路径,删除部分边后仍可能得到最短路;若起点与终点间仅有一条简单路径(即最短路),删除边后可能导致无法到达终点,此时次短路无解。
严格次短路
使用非严格次短路的算法求解此题时会出现错误,因该问题要求严格次短路(长度必须严格大于最短路)。
严格次短路的求解需确保结果严格大于最短路长度。
具体方法为:预处理双向最短路,使用d1数组存储起点到各点的最短路长度,d2数组存储各点到终点的最短路长度。通过枚举所有边,结合双向最短路数据计算严格次短路。
例题:
Status
Problem
Tags