import java.util.Arrays;

public class ShortestPathSolution {

static final int RED = 2;
static final int GREEN = 1;
static final int WHITE = 0;

public int[] findAllShortestPath(int n, int[][] edges, int src) {
    int[] dist = new int[n + 1];
    Arrays.fill(dist, Integer.MAX_VALUE);
    int[] visit = new int[n + 1];

    visit[src] = GREEN;
    dist[src] = 0;

    for (int i = 0; i < n; i++) {
        int s = 0;
        for (int j = 1; j <= n; j++) {
            if (visit[j] == GREEN && dist[j] < dist[s]) {
                s = j;
            }
        }
        if (s == 0) {
            break;
        }
        visit[s] = RED;
        for (int[] ed : edges) {
            int u = ed[0], v = ed[1], w = ed[2];
            if (s == u && visit[v] != RED) {
                int d = dist[s] + w;
                if (d < dist[v]) {
                    dist[v] = d;
                    visit[v] = GREEN;
                }
            }
        }
    }

    System.out.println("所有的顶点路径信息:");
    for (int i = 1; i <= n; i++) {
        System.out.println("目标顶点 " + i + " -> " + dist[i]);
    }
    return dist;
}

}

修改的位置:

(1) 在第25行,添加了一个缺失的右括号

(2) 在第31行,将判断 s 是否为 0 的语句移动到 for 循环的外部,确保每次遍历时都能正确退出循环

Java Dijkstra 算法实现最短路径问题 - 代码优化与错误修正

原文地址: https://www.cveoy.top/t/topic/oPZL 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录