题解 | #单源最短路#

单源最短路

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

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param n int 顶点数
     * @param m int 边数
     * @param graph int二维数组 一维3个数据,表示顶点到另外一个顶点的边长度是多少​
     * @return int
     */
    int lmin = Integer.MAX_VALUE;
    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;
        int min = 0;
        visit[0] = 1;
        //i初始为零,i<n+1也可以
        for (int i = 1; i < n; i++) {
            //寻找这一轮中的最小的dist[k]
            //初始化
            for (int k = 0; k < n; k++) {
                if (visit[k] == 0 && dist[k] < Integer.MAX_VALUE)      {
                    min = dist[k];
                    mindex = k;
                }//符号打错答案会错误
            }
            //寻找最小的
            for (int k = 0; k < n; k++) {
                if (visit[k] == 0 && dist[k] < min) {
                    min = dist[k];
                    mindex = k;
                }
            }
            // System.out.println("dist:" + mindex + ":" + dist[mindex]);
            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];
                }
            }
        }
    }
}

全部评论

相关推荐

11-09 11:01
济南大学 Java
Java抽象带篮子:外卖项目真得美化一下,可以看看我的详细的外卖话术帖子
点赞 评论 收藏
分享
球球别再泡了:坏,我单9要了14
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务