티스토리 뷰

반응형

1. 다익스트라 알고리즘이란 무엇인가?


  • MST 다음에 배워서 MST와 비슷한가? 싶었지만 약간 다른 다익스트라!
  • MST는 모든 정점을 잇는 간선이 하나씩 존재해서 모든 정점을 다 이었다면, 다익스트라는 시작정점에서 끝정점으로 가는 경로 중에 가중치가 제일 적은 값을 고르는 알고리즘이다!
  • 이 때 특징은 ‘유향’ 그래프, 즉 A → B로는 갈 수 있지만 반대로 B → A로는 가지 않는 ‘방향’ 이 주어지는 그래프라는 것이다.

2. 다익스트라 알고리즘 python 으로 구현하기


1. V개의 노드를 방문할 때마다 V개의 인접 노드에 대해서 검사하는 방식

→ Prim 알고리즘과 유사한 방식, 시간복잡도가 O(V^2)로 큰편이다.

T = int(input())
for tc in range(1, T+1):
    N, E = map(int, input().split())
    adj = [[] for _ in range(N+1) ]
    for _ in range(E):
        s,e,w = map(int, input().split())
        adj[s].append((e,w))

    D = [11]*(N+1) # 최종가중치가 저장될 리스트
    D[0] = 0

    U = [] # 방문처리를 할 리스트

    for _ in range(N):
        u = 0
        minV = 11
        for i in range(N+1):
            if D[i] < minV and i not in U:
                u = i
                minV = D[u]

        U.append(u)

        for j in range(len(adj[u])):
            D[adj[u][j][0]] = min(D[adj[u][j][0]], minV+adj[u][j][1]) # 끝지점

    print(f"#{tc} {D[N]}")

2. 우선순위 큐 / 최소힙을 이용해서 구현하는 방식

def dijkstra(start):
        q = []
        distance[start] = 0
        heapq.heappush(q, (0, start))
        while q:
            dist, cur = heapq.heappop(q)

            if distance[cur] < dist:
                continue

            for next in adj[cur]:
                cost = dist + next[1]
                if cost < distance[next[0]]:
                    distance[next[0]] = cost
                    heapq.heappush(q, (cost, next[0]))

Uploaded by N2T

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함