Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "fmt"
- "github.com/skorobogatov/input"
- )
- const INF = 2147483647
- func coprofilling_min( min_e []int) {
- for i := 0; i < len(min_e); i++ {min_e[i] = INF}
- }
- func filling_way(g []Vertex) {
- for i := 0; i < len(g); i++ {
- g[i].edges = make([]int, len(g))
- for j := 0; j < len(g); j++ {
- g[i].edges[j] = INF
- }
- }
- }
- func ya_ebal_mamy_rombi(a, b int) int {
- if a < b {
- return a
- }else{
- return b
- }
- }
- func filling_dick_in_romans_mom_ass(m int, g []Vertex) {
- for i := 0; i < m; i++ {
- var indexA, indexB, dist int
- input.Scanf("%d %d %d", &indexA, &indexB, &dist)
- g[indexA].edges[indexB] = dist
- g[indexB].edges[indexA] = dist
- }
- }
- type Vertex struct {
- edges []int
- used bool
- }
- func main() {
- var n, m int
- input.Scanf("%d \n %d", &n, &m)
- graph := make([]Vertex,n)
- filling_way(graph)
- filling_dick_in_romans_mom_ass(m, graph)
- var min_e[]int
- min_e = make([]int, n)
- coprofilling_min(min_e)
- PRIM := func(g []Vertex, min_e []int) int {
- min_e[0] = 0
- res := 0
- for i := 0; i < len(g); i++ {
- min1 := INF
- var u int
- for j := 0; j < len(g); j++ {
- if !g[j].used && min_e[j] < min1 {
- min1 = min_e[j]
- u = j
- }
- }
- res += min1
- g[u].used = true
- for v := 0; v < len(g); v++ {
- min_e[v] = ya_ebal_mamy_rombi(min_e[v],g[u].edges[v])
- }
- }
- return res
- }
- fmt.Println(PRIM(graph,min_e))
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement