繁体   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