洛谷 P3371 单源最短路径(Java版)

Posted ZSYL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了洛谷 P3371 单源最短路径(Java版)相关的知识,希望对你有一定的参考价值。

洛谷 P3371 单源最短路径

题目描述

给出一个有向图,请输出从某一点出发到所有点的最短路径长度。

在这里插入图片描述

输入

4 6 1
1 2 2
2 3 2
2 4 1
1 3 5
3 4 3
1 4 4

输出

0 2 4 3

样例说明:

在这里插入图片描述

参考代码

迪杰斯特拉算法简化版

n个顶点遍历n次,每次遍历m条边,更新起点src到其他m个点的最短距离。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
import java.util.Arrays;

public class Main {
    static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
    public static void main(String[] args) {
        int n = nextInt();
        int m = nextInt();
        int src = nextInt();
        long[] value = new long[n+1];
        int[][] x = new int[m][3];
        Arrays.fill(value, Integer.MAX_VALUE);
        value[src] = 0;
        for (int i = 0; i < m; i++) {
            x[i][0] = nextInt();
            x[i][1] = nextInt();
            x[i][2] = nextInt();
        }
        for (int i = 1; i <= n; i++) {
            int t = 0;
            for (int j = 0; j < m; j++) {
                if (value[x[j][1]] > (value[x[j][0]]+x[j][2])) {
                    value[x[j][1]] = value[x[j][0]]+x[j][2];
                    t = 1;
                }
            }
            if (t == 0)
                    break;
        }
        for (int i = 1; i <= n; i++) {
            System.out.print(value[i] + " ");
        }
    }
    static int nextInt() {
        try {
            in.nextToken();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return (int)in.nval;
    }
}

在这里插入图片描述
加油!

感谢!

努力!

以上是关于洛谷 P3371 单源最短路径(Java版)的主要内容,如果未能解决你的问题,请参考以下文章

洛谷 p3371模板-单源最短路径(图论)

洛谷 P3371 模板单源最短路径

洛谷 P3371 模板单源最短路径

P3371 模板单源最短路径(弱化版)

P3371 模板单源最短路径(弱化版)

luogu P3371 & P4779 ---单源最短路径spfa & 最大堆优化Dijkstra