다익스트라 알고리즘 (백준 1753번: 최단경로)

2024. 1. 23. 00:07·프로그래밍

https://www.acmicpc.net/problem/1753

 

1753번: 최단경로

첫째 줄에 정점의 개수 V와 간선의 개수 E가 주어진다. (1 ≤ V ≤ 20,000, 1 ≤ E ≤ 300,000) 모든 정점에는 1부터 V까지 번호가 매겨져 있다고 가정한다. 둘째 줄에는 시작 정점의 번호 K(1 ≤ K ≤ V)가

www.acmicpc.net

 

파이썬으로 알고리즘 정리하기 위해 아래와 같이 작성했다.

import sys
import heapq

def dijkstra(graph, start):
    n = len(graph)

    # 최초 거리를 무한으로 설정
    dist = [float('inf')] * n

    # 시작점의 거리는 0
    dist[start] = 0
    # 시작점을 큐에 추가
    heap = [(0, start)]
    while heap:
        # u : 지금 방문한 노드
        # d : 시작점에서 u 까지의 거리
        # v : u 에서 연결 된 노드 (다음에 방문할 노드)
        # w : u -> v 까지의 거리
        # dist[u] : 지금까지 계산한 u 까지의 최소 거리
        # dist[v] : 지금까지 계산한 v 까지의 최소 거리
        
        # 방문할 노드 꺼냄
        (d, u) = heapq.heappop(heap)

        # 이전에 더 가깝게 방문했다면 패스
        if d > dist[u]:
            continue

        # 연결된 노드 들을 확인
        for w, v in graph[u]:
            # 방문한 노드까지의 거리 + 다음 노드 까지의 거리가 이전에 계산한 값보다 짧으면,
            # 거리값을 저장 후 우선순위 큐에 저장
            if dist[u] + w < dist[v]:
                dist[v] = dist[u] + w
                heapq.heappush(heap, (dist[v], v))
    return dist

input=sys.stdin.readline
V, E = map(int, input().split())
# 정점(노드)의 번호가 1번 부터 시작 해서 1 뺌
K = int(input()) - 1

graph = [[] for _ in range(V)]

for _ in range(E):
    u, v, w = map(int, input().split())
    graph[u-1].append((w, v-1))

dist = dijkstra(graph, K)

for i in range(V):
    if dist[i] == float('inf'):
        print("INF")
    else:
        print(dist[i])


'''
예제 입력
5 6
1
5 1 1
1 2 2
1 3 3
2 3 4
2 4 5
3 4 6

예제 출력
0
2
3
7
INF
'''

'프로그래밍' 카테고리의 다른 글

BFS 알고리즘 (백준 2021번: 최소 환승 경로)  (0) 2024.08.02
유니온 파인드 알고리즘 (백준 1717: 집합의 표현)  (0) 2024.02.03
공간이 연속 할 경우 합치기  (0) 2024.01.22
DFS/BFS 구현 시 큐에 넣기 전에 방문 처리 할 것  (0) 2024.01.10
파이썬3의 딕셔너리의 keys() 메서드 반환 값은 리스트가 아니야.  (0) 2024.01.08
'프로그래밍' 카테고리의 다른 글
  • BFS 알고리즘 (백준 2021번: 최소 환승 경로)
  • 유니온 파인드 알고리즘 (백준 1717: 집합의 표현)
  • 공간이 연속 할 경우 합치기
  • DFS/BFS 구현 시 큐에 넣기 전에 방문 처리 할 것
virbr0.net
virbr0.net
  • virbr0.net
    virbr0.net
    virbr0.net
  • 전체
    오늘
    어제
    • 분류 전체보기
      • SIP
      • HTTP
      • OS
      • 프로그래밍
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    셀프칭찬
    BFS
    파일명
    다익스트라
    유기농 배추
    DFS
    클라우드
    해외발신
    IIS
    RTP
    ADC
    시간복잡도
    인증서
    브로드웍스
    파이썬
    딕셔너리
    alteon
    인터넷전화
    윈도우서버
    chunked
    HTTP
    최단경로
    회사생활
    rtp inject
    SBC
    URL Rewrite
    가상화
    RDP
    파일명 없이 다운로드
    SIP
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
virbr0.net
다익스트라 알고리즘 (백준 1753번: 최단경로)
상단으로

티스토리툴바