반응형
https://www.acmicpc.net/problem/9694
소스코드
import sys
import heapq as hq
input = sys.stdin.readline
def dijkstra(start):
q = []
min_dis = [float('inf') for _ in range(m)]
min_dis[start] = 0
hq.heappush(q,[0,start])
while q:
cur_dis,cur_node = hq.heappop(q)
if min_dis[cur_node] < cur_dis:
continue
for next_node, next_dis in graph[cur_node]:
if min_dis[next_node] > cur_dis + next_dis:
min_dis[next_node] = cur_dis + next_dis
pre_node[next_node] = cur_node # 역추적을 위해 이전경로 저장
hq.heappush(q,[cur_dis + next_dis, next_node])
return min_dis
t = int(input())
for tc in range(1,t+1):
n,m = map(int,input().split())
graph = [[] for _ in range(m)]
pre_node = [0] * m
for _ in range(n):
x,y,z = map(int,input().split())
graph[x].append([y,z]) # 친구 사이니까 양방향 간선으로 표현
graph[y].append([x,z])
t = dijkstra(0)
if t[m-1] == float('inf'):
print('Case #{}: {}'.format(tc,-1))
else: # 경로 역추적
path = [m-1]
now = m-1
while now != 0:
now = pre_node[now]
path.append(now)
path.reverse()
print('Case #{}:'.format(tc),end=' ')
print(*path)
풀이
★ 출발지에서 목적지까지의 최단경로로 이동했을 때, 방문했던 정점을 출력하는 전형적인 문제였습니다. 다익스트라를 수행하면서 방문했던 정점들을 체크하고, 목적지에서부터 다시 출발지점까지 방문했던 정점들을 다시 확인해줍니다 :)
반응형
'Algorithm > 백준' 카테고리의 다른 글
[백준 알고리즘] 5944번: Apple Delivery (Python) (0) | 2023.12.01 |
---|---|
[백준 알고리즘] 6248번: Bronze Cow Party (Python) (1) | 2023.12.01 |
[백준 알고리즘] 9370번: 미확인 도착지 (Python) (1) | 2023.11.30 |
[백준 알고리즘] 27008번: Checking an Alibi (Python) (1) | 2023.11.28 |
[백준 알고리즘] 22116번: 창영이와 퇴근 (Python) (0) | 2023.11.28 |