Java 迪克斯特拉';s算法辅助
给定一个邻接矩阵,我需要计算第一个顶点和最后一个顶点之间的最短路径(通常是顶点I和j,但我们暂时可以忽略它)。我已经编写了一个算法,它实际上只正确地计算第一个和第二个节点之间的距离(我想这是朝着正确方向迈出的一步)Java 迪克斯特拉';s算法辅助,java,Java,给定一个邻接矩阵,我需要计算第一个顶点和最后一个顶点之间的最短路径(通常是顶点I和j,但我们暂时可以忽略它)。我已经编写了一个算法,它实际上只正确地计算第一个和第二个节点之间的距离(我想这是朝着正确方向迈出的一步) 它将返回2(一条路径位于权重为1的顶点1和2之间,另一条路径位于权重为1的顶点2和3之间)。如果矩阵不仅存储1s和0s,还存储从i到j的距离,那么您确实需要跟踪从任何节点i到j的最佳距离。换句话说,工作数组应该是一个工作矩阵。即使你只是做一个非加权图,我认为这种方法更好 SPF算法有
它将返回2(一条路径位于权重为1的顶点1和2之间,另一条路径位于权重为1的顶点2和3之间)。如果矩阵不仅存储1s和0s,还存储从i到j的距离,那么您确实需要跟踪从任何节点i到j的最佳距离。换句话说,工作数组应该是一个工作矩阵。即使你只是做一个非加权图,我认为这种方法更好 SPF算法有不同的版本。发布您试图翻译成java的伪代码
static int dijkstra(int[][] G, int i, int j) {
//Get the number of vertices in G
int n = G.length;
int[] bestpath = new int[n];
int max = Integer.MAX_VALUE;
boolean[] visited = new boolean[n];
for (int x = 0; x < n; x++) {
visited[x] = false;
bestpath[x] = max;
}
bestpath[i] = 0;
for (int x = 0; x < n; x++) {
int min = max;
int currentNode = i;
for (int y = 0; y < n; y++) {
if (!visited[y] && bestpath[y] < min) {
System.out.println(G[y][x]);
currentNode = y;
min = bestpath[y];
}
}
visited[currentNode] = true;
for (int y = 0; y < n; y++) {
if (G[currentNode][y] < max && bestpath[currentNode] + G[currentNode][y] < bestpath[y]) {
bestpath[y] = bestpath[currentNode] + G[currentNode][y];
}
}
}
return bestpath[j];
}
for (int y = 0; y < n; y++) {
if (!visited[y] && bestpath[y] < min) {
System.out.println(G[y][x]);
currentNode = y;
min = bestpath[y];
}
}
0 1 0
1 0 1
0 1 0