dijkstra算法求单源最短路径 java版本解析
dijkstra原理
具体的原理网上有太多了,我就不过多的赘述,具体原理请点击
代码及分析
关键是要利用优先队列的性质,找出剩余未标记节点的最小距离节点来进下一步。因为已标记的节点可以看做是一个整体,其他节点到这个整体的最小值节点也就是所求的下一个最短路径节点。
举例:当前网络整体为{w}
点a 到 w 距离为 1
点b 到 w 距离为 2
如果只有这两个点可以到w, 毫无疑问,a就是下一个最短路径节点。因为无论如何其他节点要么经过a,要么经过b到达w。
public class dijkstra {
int MAX = 100000;
class Node {
//定义结构体
public int to_index; //该节点的标号
public int distance; //该节点距离起点的距离 主要用来排序 不访问
Node(int x, int y){
this.to_index = x;
this.distance = y;
}
}
/*
两个集合S和U。S的作用是记录已求出最短路径的顶点(以及相应的最短路径长度)
而U则是记录还未求出最短路径的顶点(以及该顶点到起点s的距离)。
*/
public int[] getMinDistance(int[][] matrix){