| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 | package mainimport (	"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	}	dist, prev := bellmanFord(adj, length, src)	fmt.Println(dist)	fmt.Println(prev)}func bellmanFord(adj [][]int, length [][]int, src int) ([]int, []int) {	n := len(adj)	dist := make([]int, n)	prev := make([]int, n)	for i := 0; i < n; i++ {		dist[i] = math.MaxInt32		prev[i] = -1	}	dist[src] = 0	for updated := true; updated; updated = false {		for u := range adj {			for _, v := range adj[u] {				if alt := dist[u] + length[u][v]; alt < dist[v] {					dist[v] = alt					prev[v] = u					updated = true				}			}		}	}	return dist, prev}
 |