1、算法简介
Dijkstra算法是解决单源最短路径问题的贪心算法, 它先求出长度最短的一条路径,再参照该最短路径求出长度次短的一条路径 直到求出从源点到其他各个顶点的最短路径。
2、算法基本思想
首先假定源点为u,顶点集合V被划分为两部分:集合 S 和 V-S。 初始时S中仅含有源点u,其中S中的顶点到源点的最短路径已经确定。集合S 和V-S中所包含的顶点到源点的最短路径的长度待定,称从源点出发只经过S中的点到达V-S中的点的路径为特殊路径,并用dist[]记录当前每个顶点对应的最短特殊路径长度。
3、代码
public static int[] dijkstra(int[][] distance,int origin,int n) {
//定义算法需要的中间变量
boolean[] used = new boolean[n];//使用标记
int[] minDis = new int[n];//最短路径
int maxValue = Integer.MAX_VALUE;//Java中定义的最大值
int pathIndex = origin - 1;//与源点距离最近的点
for (int i = 0; i < used.length; i++) {
used[i] = false;
//System.out.println(used[i]);
}
for (int i = 0; i < n; i++) {
minDis[i] = distance[origin - 1][i];
}
used[origin - 1] = true;
for (int i = 1; i < n; i++) {
int min = maxValue;
for (int j = 0; j < n; j++) {
if (!used[j] && minDis[j] < min) {
min = minDis[j];
pathIndex = j;
}
}
used[pathIndex] = true;
for (int k = 0; k < n; k++) {
if (distance[pathIndex][k] < maxValue) {
if (minDis[pathIndex] + distance[pathIndex][k] < minDis[k]) {
minDis[k] = minDis[pathIndex] + distance[pathIndex][k];
}
}
}
}
return minDis;
}