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

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바