다익스트라 알고리즘 (백준 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
      • 프로그래밍
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바