[Python]標準/ゴールド/1779:最低コスト2
質問リンク:https://www.acmicpc.net/problem/11779
マルチアウトプットアルゴリズムの問題.この問題は最短距離だけでなく,最短経路も要求される.これは私が初めてパスを解いたので、ドエストラアルゴリズムの流れを正しく理解すれば、難しくありません.マルチアウトレットは、優先キューにノードを挿入して最短距離を更新するアルゴリズムであるため、そのキューにパスを格納してアルゴリズムを実行するだけでよい.
覚えておいてください.
最短パスを求める場合は、キューにパス挿入を追加するだけです.
マルチアウトプットアルゴリズムの問題.この問題は最短距離だけでなく,最短経路も要求される.これは私が初めてパスを解いたので、ドエストラアルゴリズムの流れを正しく理解すれば、難しくありません.マルチアウトレットは、優先キューにノードを挿入して最短距離を更新するアルゴリズムであるため、そのキューにパスを格納してアルゴリズムを実行するだけでよい.
覚えておいてください.
最短パスを求める場合は、キューにパス挿入を追加するだけです.
Pythonコード
import sys
import heapq
INF = 987654321
N = int(sys.stdin.readline())
M = int(sys.stdin.readline())
graph = [[] for _ in range(N + 1)]
for _ in range(M):
# 출발 노드, 도착 노드, 비용
a, b, c = map(int, sys.stdin.readline().split())
graph[a].append((b, c))
def dijkstra(start, end):
# [거리, 지나온 경로]
distance = [[INF, []] for _ in range(N + 1)]
distance[start] = [0, [start]]
q = []
# (거리, 노드, 지나온 경로)
heapq.heappush(q, (0, start, [start]))
while q:
dist, now, path = heapq.heappop(q)
if distance[now][0] < dist:
continue
for node, d in graph[now]:
cost = dist + d
if cost < distance[node][0]:
distance[node][0] = cost
distance[node][1] = path + [node]
q.append((cost, node, path + [node]))
print(distance[end][0])
print(len(distance[end][1]))
for x in distance[end][1]:
print(x, end=' ')
S, E = map(int, sys.stdin.readline().split())
dijkstra(S, E)
Reference
この問題について([Python]標準/ゴールド/1779:最低コスト2), 我々は、より多くの情報をここで見つけました https://velog.io/@heyksw/Python-백준-gold-11779-최소비용-구하기-2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol