参考了的这里的伪代码,使用java实现
import java.util.Scanner;
import javax.crypto.spec.IvParameterSpec;
public class Main {
//Bellman-Ford
static void bellman_ford(int startV, int[][] relations) {
int[] dist = new int[relations.length + 1];
int[] pre = new int[relations.length + 1];
for (int i = 1; i < relations.length; i++) {
if (i == startV)
dist[i] = 0;
else {
dist[i] = Integer.MAX_VALUE;
pre[i] = 0;
}
}
for (int i = 1; i < relations.length - 1; i++) {
for (int p = 1; p < relations.length; p++) {
for (int q = 1; q < relations[p].length; q++) {
long tmp = (long) dist[p] + (long) relations[p][q];
if (tmp < dist[q]) {
dist[q] = dist[p] + relations[p][q];
pre[q] = p;
}
}
}
}
for (int p = 1; p < relations.length; p++) {
for (int q = 1; q < relations[p].length; q++) {
long tmp = (long) dist[p] + (long) relations[p][q];
if(tmp<dist[q])
System.out.println("error");
}
}
for (int i = 2; i < relations.length; i++) {
System.out.println("v" + i + " " + dist[i]);
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int m = scanner.nextInt();
int[][] relations = new int[n + 1][n + 1];
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
relations[i][j] = Integer.MAX_VALUE;
}
}
for (int i = 0; i < m; i++) {
int start = scanner.nextInt();
int end = scanner.nextInt();
int weight = scanner.nextInt();
relations[start][end] = weight;
}
bellman_ford(1, relations);
scanner.close();
}
}