티스토리 뷰

알고리즘/백준

[BAEKJOON]1753 최단경로 - Python

응애~ 개발자 2022. 12. 23. 11:35
728x90
반응형

문제 요약

  • 알고리즘 분류: 다익스트라
  • 난이도: Gold4
  • 문제내용:
    • 시작점 부터 각 노드간의 최단 거리를 구해라.
    • 이동 못할 경우 'INF'를 출력해라
 

1753번: 최단경로

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

www.acmicpc.net

문제풀이

   이번에는 문제 유형은 그래프 탐색중에 다익스트라 알고리즘 문제이다. 다익스트라 알고리즘 기본적인것을 묻기 때문에 자세한 설명은 여기서 참조하면된다. 풀이에 대한 설명은 다익스트라 알고리즘알면 풀수 있기때문에 따로 설명은 안하지만 주위 할점은 그래프 초기 설정시 이동시 중복된 노드있기 때문에 dic, dic으로 구조 하면 중복된 값때문에 바뀔수 있기 때문에 dic, list 형식으로 저장하면 맞출수 있을것이다.

Code

Python

import heapq, sys
from collections import defaultdict

input = sys.stdin.readline
INF = float('inf')

def dijkstra(grape, start):
    distances[start] = 0
    queue = []
    heapq.heappush(queue, (distances[start], start))
    
    while queue:
        current_distance, current_node = heapq.heappop(queue)
        
        if current_distance > distances[current_node]: continue
        
        for node, weight in grape[current_node]:
            distance = current_distance + weight
            
            if distance < distances[node]:
                distances[node] = distance
                heapq.heappush(queue, (distance, node))
                   
V, E = map(int, input().split())
grape = {i : [] for i in range(1, V + 1)}
start = int(input())
distances = {i: INF for i in range(1, V + 1)}

for _ in range(E):
    u, v, w = map(int, input().split())
    grape[u].append((v, w))
    
dijkstra(grape, start)
for i in range(1, V + 1):
    print("INF" if distances[i] == INF else distances[i])
728x90
반응형

'알고리즘 > 백준' 카테고리의 다른 글

[BAEKJOON]2372 Livestock Count - Ada  (0) 2022.12.24
[BAEKJOON]1809 Moo - Golfscript  (2) 2022.12.24
[BAEKJOON] 11404 플로이드  (0) 2022.12.21
[BAEKJOON] 13549 숨바꼭질 3  (0) 2022.12.20
[BAEKJOON] 1967 트리의 지름 - Python  (0) 2022.12.19
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함