题目:紧急救援
思路:
看下问题:
(1)求最短路径;
(2)记录不同最短路径的个数即最短路径可能存在多条相同的值,但路径不同;
(3)在最短路径的基础上筛选人数最多的一条路径;
(4)记录路径。
求解:
利用最基本的Dijkstra直接可求出问题(1);
而问题(2)和(3)其实同解问题(1)一样,只需再添加俩个数组,分别记录到每个点路径个数和人数即可。
记录路径条数:当筛选最短路径时,只需记录将当前路径个数数组等于上一步的路径个数即可,而当出现相等的路径时,将上一步的路径个数累加到当前路径个数数组。
记录人数:只需当出现相等的最优解路径时,进行比较当前的人数后更新最优解人数即可。
而问题(4)就是同链表一样,记录上一结点即可:只需每次进行选取最优解时用一个数组进行记录上一步的位置即可,因为每个点只出现一次,所有记录路径时不会出现覆盖情况。
参考: