@@ -636,6 +636,71 @@ dijkstra 是贪心的思路 每一次搜索都只会找距离源点最近的非
636636## 其他语言版本
637637
638638### Java
639+ ``` Java
640+ import java.util.* ;
641+
642+ public class Main {
643+ // 基于Bellman_for一般解法解决单源最短路径问题
644+ // Define an inner class Edge
645+ static class Edge {
646+ int from;
647+ int to;
648+ int val;
649+ public Edge (int from , int to , int val ) {
650+ this . from = from;
651+ this . to = to;
652+ this . val = val;
653+ }
654+ }
655+
656+ public static void main (String [] args ) {
657+ // Input processing
658+ Scanner sc = new Scanner (System . in);
659+ int n = sc. nextInt();
660+ int m = sc. nextInt();
661+
662+ List<Edge > graph = new ArrayList<> ();
663+
664+ for (int i = 0 ; i < m; i++ ) {
665+ int from = sc. nextInt();
666+ int to = sc. nextInt();
667+ int val = sc. nextInt();
668+ graph. add(new Edge (from, to, val));
669+ }
670+
671+ int src = sc. nextInt();
672+ int dst = sc. nextInt();
673+ int k = sc. nextInt();
674+
675+ int [] minDist = new int [n + 1 ];
676+ int [] minDistCopy;
677+
678+ Arrays . fill(minDist, Integer . MAX_VALUE );
679+ minDist[src] = 0 ;
680+
681+ for (int i = 0 ; i < k + 1 ; i++ ) { // Relax all edges k + 1 times
682+ minDistCopy = Arrays . copyOf(minDist, n + 1 );
683+ for (Edge edge : graph) {
684+ int from = edge. from;
685+ int to = edge. to;
686+ int val = edge. val;
687+ // Use minDistCopy to calculate minDist
688+ if (minDistCopy[from] != Integer . MAX_VALUE && minDist[to] > minDistCopy[from] + val) {
689+ minDist[to] = minDistCopy[from] + val;
690+ }
691+ }
692+ }
693+
694+ // Output printing
695+ if (minDist[dst] == Integer . MAX_VALUE ) {
696+ System . out. println(" unreachable" );
697+ } else {
698+ System . out. println(minDist[dst]);
699+ }
700+ }
701+ }
702+
703+ ```
639704
640705### Python
641706
0 commit comments