|
@@ -0,0 +1,49 @@
|
|
|
|
+package main
|
|
|
|
+
|
|
|
|
+import (
|
|
|
|
+ "fmt"
|
|
|
|
+ "math"
|
|
|
|
+)
|
|
|
|
+
|
|
|
|
+func main() {
|
|
|
|
+ var n, m, src int
|
|
|
|
+ fmt.Scan(&n, &m, &src)
|
|
|
|
+ adj := make([][]int, n)
|
|
|
|
+ length := make([][]int, n)
|
|
|
|
+ for i := range length {
|
|
|
|
+ length[i] = make([]int, n)
|
|
|
|
+ }
|
|
|
|
+ for i := 0; i < m; i++ {
|
|
|
|
+ var u, v, l int
|
|
|
|
+ fmt.Scan(&u, &v, &l)
|
|
|
|
+ adj[u] = append(adj[u], v)
|
|
|
|
+ length[u][v] = l
|
|
|
|
+ }
|
|
|
|
+ fmt.Println(floyd(adj, length))
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func floyd(adj [][]int, length [][]int) [][]int {
|
|
|
|
+ n := len(adj)
|
|
|
|
+ dist := make([][]int, n)
|
|
|
|
+ for i := range dist {
|
|
|
|
+ dist[i] = make([]int, n)
|
|
|
|
+ for j := range dist[i] {
|
|
|
|
+ dist[i][j] = math.MaxInt32
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ for u := range adj {
|
|
|
|
+ for _, v := range adj[u] {
|
|
|
|
+ dist[u][v] = length[u][v]
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ for k := 0; k < n; k++ {
|
|
|
|
+ for i := 0; i < n; i++ {
|
|
|
|
+ for j := 0; j < n; j++ {
|
|
|
|
+ if alt := dist[i][k] + dist[k][j]; alt < dist[i][j] {
|
|
|
|
+ dist[i][j] = alt
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return dist
|
|
|
|
+}
|