say repository

프림 알고리즘 본문

알고리즘

프림 알고리즘

부끄러엇피치 2025. 3. 25. 15:39
728x90

최소 신장 트리 (MST)을 구할 경우

1. 크루스칼 알고리즘 (union find 활용)

2. 프림 알고리즘

 

프림 알고리즘

1. 우선순위 큐 ( heapq ) 활용

2. 우선순위 큐에 (가중치, 시작점) push

3. 간선-1 만큼 우선순위큐 pop

import heapq

# MST (최소 신장 트리 )
# 1. 크루스칼 알고리즘 ( UNION FIND 알고리즘)
# 2. 프림 알고리즘
# 프림 알고리즘
def prim(start):
    visited = [False]*(n+1) # 방문처리
    sum_w = 0

    # 우선순위큐 (가중치, 시작점)
    heap = []
    heapq.heappush(heap,(0,start))

    cnt = 0
    while heapq and cnt<n: # 간선-1 만큼 우선순위큐 pop
        w,v = heapq.heappop(heap)
        if not visited[v]:
            visited[v] = True
            sum_w += w
            cnt += 1
            for i in graph[v]:
                heapq.heappush(heap,i)

 

 

'알고리즘' 카테고리의 다른 글

유니온파인드 알고리즘  (0) 2025.03.24