dengxinyi 6 rokov pred
rodič
commit
24aedc2e0f
1 zmenil súbory, kde vykonal 49 pridanie a 0 odobranie
  1. 49 0
      oj/algorithms/graph/floyd.go

+ 49 - 0
oj/algorithms/graph/floyd.go

@@ -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
+}