🌲 최소 신장 트리 (MST, Minimum Spanning Tree)
- 간선의 가중치를 고려하여 최소 비용의 Spanning Tree를 선택하는 것
- Spanning Tree 란?
- 최소 연결 부분 그래프
- 모든 정점들이 연결되어 있어야 하고, 사이클을 포함해서는 안된다.
- K 개의 정점을 K-1 개로 연결한다.
🌱 Kruskal Algorithm
- 간선들을 중심으로 그리디 알고리즘을 통해 MST를 구하는 알고리즘
구현 방법
- 그래프의 간선들을 가중치 기준 오름차순으로 정렬한다.
- 정렬된 간선 리스트에서 순서대로 사이클을 형성하지 않는 간선을 선택한다.
- 해당 간선을 현재의 MST 집합에 추가한다.
코드 작성
arr = [0]*200
k = int(input())
n = int(input())
lst = [list(input().split()) for _ in range(n)]
lst.sort(key=lambda x:int(x[2]))
def findboss(member):
if not arr[ord(member)]:
return member
ret = findboss(arr[ord(member)])
return ret
def union(a, b):
global total, cnt
fa, fb = findboss(a), findboss(b)
if fa == fb:
return
total += int(lst[i][2])
cnt += 1
arr[ord(fb)] = fa
total = 0
cnt = 0
for i in range(n):
if cnt == k-1:
print(total)
break
union(lst[i][0], lst[i][1])
⭐️ 문제 추천
[BOJ] - 1197. 최소 스패닝 트리