簡體   English   中英

Dijkstra的算法輔助

[英]Dijkstra's Algorithm Assistance

給定一個鄰接矩陣,我需要計算第一個頂點和最后一個頂點之間的最短路徑(通常是頂點i和j,但暫時我們可以忽略它)。 我編寫了一種算法,該算法實際上只能正確地計算出第一個節點與第二個節點之間的距離(我想是朝正確方向邁出的一步)。

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之間的另一條路徑)。

如果矩陣不僅存儲1和0,還存儲從i到j的距離,那么您確實需要跟蹤從任何節點i到j的最佳距離。 換句話說,您的工作數組應改為工作矩陣。 即使您只是在做非加權圖,我認為這種方法更好。

SPF算法有不同版本。 發布您要轉換為Java的偽代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM