题目描述
求一个顶点到其他顶点的最短距离。
总体思路
假设有集合S和集合T,一开始S中只有源点,T中有除源点之外的所有顶点。
每次循环将集合T中距离源点最近的顶点X加入集合S中,得出源点到该顶点的最短距离。再继续一次循环,如果源点到顶点X的距离 + 顶点X到集合T中的顶点的距离 < 集合T中的顶点到源点的距离,那么更新集合T中的顶点到源点的距离为源点到顶点X的距离 + 顶点X到集合T中的顶点的距离。
循环到集合T中没有顶点就结束。
邻接矩阵
public class Dijkstra {
// matrix是有向图数组,如果顶点间没有相连,那么值设为10000
public static int[] dijkstra(int[][] matrix, int source) {
int len = matrix.length;
int[] shortest = new int[len];
boolean[] vis = new boolean[len];
shortest[source] = 0;
vis[source] = true;
for (int i = 1; i < len; i++) {
int min = Integer.MAX_VALUE;
int index = -1;
for (int j = 0; j < len; j++) {
if (!vis[j] && matrix[source][j] < min) {
min = matrix[source][j];
index = j;
}
}
shortest[index] = min;
vis[index] = true;
for (int j = 0; j < len; j++) {
if (!vis[j] && matrix[source][index] + matrix[index][j] < matrix[source][j]) {
matrix[source][j] = matrix[source][index] + matrix[index][j];
}
}
}
return shortest;
}
public static void main(String[] args) {
int Max