digestra算法
digestra算法是从一个顶点到其余顶点的最短路径算法。采用贪心算法思想,第一次查找,找到离原点最近的一个点,标记为已遍历,下一次查找时,从未被遍历的点中找到一个离起点最近的点标记为已遍历,以此类推,直到所有点都遍历到。
解决办法
代码
public class Dijkstra {
public int[] ShortestPaths(int[][] quanzhong) {
int[] result = new int[quanzhong.length];
//判断顶点是否被遍历
boolean[] used = new boolean[quanzhong.length];
used[0] = true;
for (int i = 1; i < quanzhong.length; i++) {
result[i] = quanzhong[0][i];
used[i] = false;
}
for (int i = 1; i < quanzhong.length; i++) {
int min = Integer.MAX_VALUE;
int k = 0;
for (int j = 1; j < quanzhong.length; j++) {
//找到顶点0到其它顶点中距离最小的一个顶点
if (!used[j] && result[j] != -1 && min > result[j]) {
min = result[j];
k = j;
}
}
used[k] = true;
for (int j = 1; j < quanzhong.length; j++) {
//更新最短距离
//当顶点j未被遍历时
if (!used[j]) {
//首先,顶点k到顶点j要能通行;这时,当顶点0到顶点j的距离大于顶点0到k再到j的距离或者顶点0无法直接到达顶点j时,更新顶点0到顶点j的最短距离
if (quanzhong[k][j] != -1 && (result[j] > min + quanzhong[k][j] || result[j] == -1))
result[j] = min + quanzhong[k][j];
}
}
}
return result;
}
}