12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- 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
- }
|