Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "fmt"
- "github.com/skorobogatov/input"
- )
- type Graph struct {
- value [][]int
- used []bool
- min_e []int
- sel_e []int
- }
- const INF = 2147483647
- var v, result int
- func PRIM(graph Graph) {
- graph.min_e[0] = 0
- for i := 0; i < len(graph.value); i++ {
- v = -1
- for j := 0; j < len(graph.value); j++ {
- if !graph.used[j] && (v == -1 || graph.min_e[j] < graph.min_e[v]) {
- v = j
- }
- }
- if graph.min_e[v] == INF {
- fmt.Println("No MST!")
- break
- }
- graph.used[v] = true
- if graph.sel_e[v] != -1 {
- result += graph.min_e[v]
- }
- for to := 0; to < len(graph.value); to++ {
- if graph.value[v][to] < graph.min_e[to] {
- graph.min_e[to] = graph.value[v][to]
- graph.sel_e[to] = v
- }
- }
- }
- }
- func main() {
- var n, m int
- var graph Graph
- input.Scanf("%d \n %d", &n, &m)
- graph.value = make([][]int, n)
- graph.used = make([]bool, n)
- graph.min_e = make([]int, n)
- graph.sel_e = make([]int,n)
- for i := 0; i < n; i++ {
- graph.value[i] = make([]int, n)
- for j := 0; j < n; j++ {
- graph.value[i][j] = INF
- }
- }
- for i := 0; i < n; i++ {
- graph.min_e[i] = INF
- }
- for i := 0; i < n; i++ {
- graph.sel_e[i] = -1
- }
- for i := 0; i < m; i++ {
- var indexA, indexB, dist int
- input.Scanf("%d %d %d", &indexA, &indexB, &dist)
- //graph[indexA] = append(graph[indexA], dist)
- graph.value[indexA][indexB] = dist
- graph.value[indexB][indexA] = dist
- //graph[indexB] = append(graph[indexB], dist)
- }
- //for i:=0;i < n; i++ {fmt.Println(min_e[i])}
- //for i:=0;i < n; i++ {fmt.Println(graph.value[i])}
- PRIM(graph)
- fmt.Println(result)
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement