题解 | #单源最短路#

单源最短路

https://www.nowcoder.com/practice/9f15b34a2a944a7798a5340ff0dba8b7

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param n int 顶点数
     * @param m int 边数
     * @param graph int二维数组 一维3个数据,表示顶点到另外一个顶点的边长度是多少​
     * @return int
     */
    public int findShortestPath (int n, int m, int[][] graph) {
        // write code here
        int[][] lgraph = new int[n][n];
        int[] dist = new int[n];
        int[] visit = new int[n];
        for (int i = 0; i < n; i++) {
            dist [i] = Integer.MAX_VALUE;
        }
        dist [0] = 0;
        djstra(n, m, graph, dist, visit);
        return dist[n - 1];
    }
//不断的用新的到原点最小距离的点,更新和该点相连的所有点的到原点的最小距离(floyd算法中不是),我为人人型动态规划
    public void djstra(int n, int m, int graph[][], int[]dist,
                       int[] visit) {
        int mindex = 0;
        //i初始为零,i<n+1也可以
        for (int i = 0; i < n; i++) {
            int min = Integer.MAX_VALUE;//不能放在上面for外面,否则min无法更新
            //寻找这一轮中的最小的dist[k]
            for (int k = 0; k < n; k++) {
                if (visit[k] == 0 && dist[k] < min) {
                    min = dist[k];
                    mindex = k;
                }
            }

            visit[mindex] = 1;

            //每一轮用到原点最小距离的点,更新和该点相连的所有点的最小距离
            for (int j = 0; j < m; j++) {
                if (graph[j][0] - 1 == mindex &&
                        dist[mindex]  + graph[j][2] < dist[graph[j][1] - 1]) {
                    dist[graph[j][1] - 1] =  dist[mindex]  + graph[j][2];
                }
            }
        }
    }
}

全部评论

相关推荐

2024-12-29 11:08
湖南工业大学 Java
程序员牛肉:简历没什么大问题了。 而且不要再换项目了。三月份就开暑期实习了,现在都一月份了。实在来不及重新开一下项目了。把一个项目写完或许很快,但是把一个项目搞懂吃透并不简单。所以不要换项目了,把你简历上面的两个项目好好挖一挖吧。 具体 体现在:你能不能流利的说出你的项目的每一个功能点代码实现?你能不能说出在这块除了A技术之外,还有其他技术能够实现嘛?如果有其他技术能够实现,那你这块为什么选择了你当前用的这个技术?
投递牛客等公司
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务