迪杰斯特拉算法要求
- 1.必须给一个起点,求出起点到任何节点的最短路径,如果不可达那么距离设定为正无穷
- 2.输出一张表记录一个节点到任何节点的最短路径
- 3.dijkstra本质是一种贪心算法
要求: 不能出现权值为负的边(如果沿途路径不能构成一个环那么也可以,但最好不要有)
操作: 维护一张记录起点到任何节点的距离映射表,初始化起始点到自身距离为0,遍历该节点到其所有边可到达的最短距离并存入距离映射表,如果已存在比对存有的距离与当前距离取最小并更新距离映射表,一度完成后将该节点锁定到lockedSet中.开启下一轮,找出不存在与锁定set且距离最小的节点作为跳跃点 ...
/**
* 给定一个起点返回该起点到任何节点的最短路径
* @param start 起点
* @return 最短路径表
*/
public static HashMap<Node,Integer> dijkstra(Node start){
//距离表
HashMap<Node,Integer> distanceMap = new HashMap<>();
//只要达到距离最小即为更新完毕,进入锁定的集合中,避免重复更新
HashSet<Node> lockedNode = new HashSet<>();
//起始节点距离自身距离为0,未进入的节点说明此时距离为 + ∞
distanceMap.put(start,0);
//对未完成更新的节点进行距离更新
Node minNode