隣接行列が与えられた場合、最初の頂点と最後の頂点の間の最短経路を計算する必要があります(通常、頂点iとjですが、当面は無視できます)。私は、最初のノードと2番目のノードの間の距離を実際に正しく計算するだけのアルゴリズムを作成しました(正しい方向へのステップだと思います)。
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
これは2を返します(重み1の頂点1と2の間のパスと、重み1の2と3の間のパス)。