import Foundation
func findParent(parent: inout [Int], x: Int) -> Int {
if parent[x] != x {
parent[x] = findParent(parent: &parent, x: parent[x])
}
return parent[x]
}
func union(parent: inout [Int], a: Int, b: Int) {
let a = findParent(parent: &parent, x: a)
let b = findParent(parent: &parent, x: b)
if a < b {
parent[b] = a
} else {
parent[a] = b
}
}
let v = 7
let e = 9
var parent = Array(repeating: 0, count: v + 1)
for i in 1...v {
parent[i] = i
}
var edges = [[1, 2, 29], [1, 5, 75], [2, 3, 35], [2, 6, 34], [3, 4, 7], [4, 6, 23], [4, 7, 13], [5, 6, 53], [6, 7, 25]]
var result = 0
edges.sort(by: { $0.last! < $1.last! })
for edge in edges {
let a = edge[0]
let b = edge[1]
let cost = edge[2]
if findParent(parent: &parent, x: a) != findParent(parent: &parent, x: b) {
union(parent: &parent, a: a, b: b)
result += cost
}
}
print(result)
댓글