1. 문제 출처
https://www.acmicpc.net/problem/1238
2. 풀이
각 노드를 시작점으로 경로를 구해줘야 한다.
import heapq
# 입력
n,m,x = map(int, input().split())
graph = [[] for _ in range(n+1)]
distance = [[float('inf')] * (n+1) for _ in range(n+1)]
# 입력
for _ in range(m):
start , end , cost = map(int, input().split())
graph[start].append([cost , end])
# 데이크스트라 알고리즘
def di(start):
q = []
heapq.heappush(q,[0,start])
distance[start][start] = 0
while q:
dist, node = heapq.heappop(q)
if distance[start][node] < dist:
continue
for w,n in graph[node]:
cost = dist+ w
if distance[start][n]>cost:
distance[start][n] = cost
heapq.heappush(q,[cost,n])
def solution():
# 모든 경로에 따라 데아크스트라 알고리즘을 통해 비용을 구한다.
for i in range(1,n+1):
di(i)
result = []
# 왕복거리 리스트를 구한다.
for i in range(1,n+1):
if i == x:
continue
result.append(distance[x][i] + distance[i][x])
print(max(result))
solution()
'알고리즘 > Dijkstra algorithm(데이크스트라 알고리즘)' 카테고리의 다른 글
[Python]4485-백준-녹색 옷 입은 애가 젤다지? (0) | 2023.04.13 |
---|---|
[Python] 1504-백준-특정한 최단 경로 (0) | 2023.04.07 |
13549-백준-숨박꼭질3 (0) | 2023.04.05 |
1916-백준-최소비용 구하기 (0) | 2023.04.04 |
1753-백준-최단경로 (0) | 2023.04.03 |