백준_특정한최단경로_1504

이하연·2021년 9월 7일
0

2021알고리즘

목록 보기
22/32

백준특정한최단경로_1504골드4

코드

import heapq as hq
import sys

def dijkstra(start,graph,end) :
    queue = []
    distance = [INF] * (N + 1)
    distance[start] = 0
    hq.heappush(queue, (distance[start], start))

    while queue:
        distance_current, current = hq.heappop(queue)
        if distance_current > distance[current]:
            continue
        for adj_node, adj_cost in graph[current]:
            current_cost = distance_current + adj_cost
            if current_cost < distance[adj_node]:
                distance[adj_node] = current_cost
                hq.heappush(queue, (distance[adj_node], adj_node))

    return distance[end]

INF = int(1e9)
N,E = map(int,sys.stdin.readline().split(" "))
graph = [[] for _ in range(N+1)]
sum = 0
l = [1]

for _ in range(E) :
    a,b,c = map(int,sys.stdin.readline().split(" "))
    graph[a].append((b,c))
    graph[b].append((a,c))

v1,v2 = map(int,sys.stdin.readline().split(" "))
l.extend([v1,v2,N])

path1 = dijkstra(1,graph,v1) + dijkstra(v1,graph,v2) + dijkstra(v2,graph,N)
path2 = dijkstra(1,graph,v2) + dijkstra(v2,graph,v1) + dijkstra(v1,graph,N)

if path1 >= INF or path2 >= INF :
    print(-1)
else :
    print(min(path1,path2))

결과

0개의 댓글