https://leetcode.com/problems/min-cost-to-connect-all-points/
- 전형적인 MST문제이다.
풀이 및 해설(주석)
import heapq
class Solution(object):
def minCostConnectPoints(self, points):
N = len(points)
adj = { i:[] for i in range(N) } # i : [cost, node]
for i in range(N):
x1, y1 = points[i]
for j in range(i+1, N):
x2, y2 = points[j]
dist = abs(x1-x2)+abs(y1-y2)
adj[i].append([dist, j])
adj[j].append([dist, i])
# 프림 알고리즘
rst = 0
visit = set()
# 0에서 출발, 0에서 0으로 가는 비용은 0임
minH = [[0, 0]] # [cost, point]
while len(visit) < N:
cost, i = heapq.heappop(minH)
if i in visit:
continue
rst += cost
visit.add(i)
for neiCost, nei in adj[i]:
if nei not in visit:
heapq.heappush(minH, [neiCost, nei])
return rst
'리트코드' 카테고리의 다른 글
리트코드 130 Surrounded Regions (파이썬) (0) | 2022.10.23 |
---|---|
리트코드 778 Swim in Rising Water (파이썬) (0) | 2022.10.10 |
리트코드 684 Redundant Connection (파이썬) (0) | 2022.10.09 |
리트코드 79 Word Search (파이썬) (0) | 2022.10.09 |
리트코드 417 Pacific Atlantic Water Flow (파이썬) (0) | 2022.10.09 |