이번 문제는 다익스트라 알고리즘을 통해 해결하였다. 그래프를 양방향 인접 리스트로 저장하였고, 방문한 곳을 다시 방문하지 않도록 방문 처리도 적용하였다. BFS에 사용할 큐 q는 최소힙으로 구현하였고 q에는 현재까지 만난 소, 현재 위치를 저장하도록 하였다. 그리고 현재 위치가 목적지와 같을 경우에는 결과를 저장하는 변수를 갱신하도록 하였다.
graph[a]
에 (b, c)
를 넣는다.graph[b]
에 (a, c)
를 넣는다.sys.maxsize
로 선언한다.(0, 1)
을 넣는다. (0은 여태까지 만난 소의 수, 1은 현재 위치)visited[cur]
을 True로 갱신하여 방문처리한다.graph[cur]
을 순회하는 nxt, c_i에 대한 for문을 돌린다.cow+c_i
를 저장한다.(tmp, nxt)
를 넣는다.import sys
import heapq
n, m=map(int, input().split())
graph=[[] for _ in range(n+1)]
for _ in range(m):
a, b, c=map(int, input().split())
graph[a].append((b, c))
graph[b].append((a, c))
result=sys.maxsize
visited=[False for _ in range(n+1)]
q=[]
heapq.heappush(q, (0, 1))
while q:
cow, cur=heapq.heappop(q)
if cur==n:
result=min(result, cow)
break
if not visited[cur]:
visited[cur]=True
for nxt, c_i in graph[cur]:
tmp=cow+c_i
heapq.heappush(q, (tmp, nxt))
print(result)