|  | @@ -0,0 +1,48 @@
 | 
	
		
			
				|  |  | +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
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	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
 | 
	
		
			
				|  |  | +}
 |