洛谷 P3371 单源最短路径(Java版)
Posted ZSYL
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了洛谷 P3371 单源最短路径(Java版)相关的知识,希望对你有一定的参考价值。
题目描述
给出一个有向图,请输出从某一点出发到所有点的最短路径长度。
输入
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版)的主要内容,如果未能解决你的问题,请参考以下文章