BOJ 1753. 最短パス(python)
8398 ワード
BOJ 1753. 最短パス(python)
質問リンク
問題の説明
方向図が与えられている場合は、指定された開始点から他のすべての頂点への最短パスを解くプログラムを作成します.ただし、すべての幹線の重み付けは10以下の自然数です.
I/O例
ソリューション
import sys
import heapq
input = sys.stdin.readline
# 다익스트라 함수
def dijkstra(start):
q = []
heapq.heappush(q, (0, start))
# 시작 노드로 가기 위한 최단 경로는 0으로 설정 후 큐에 삽입
distance[start] = 0
while q:
dist, now = heapq.heappop(q)
# 이미 처리된 노드이면 무시
if distance[now] < dist:
continue
# 현재 노드와 연결된 노드를 확인
for i in graph[now]:
cost = dist + i[1]
# 현재 노드를 거쳐서 다른 노드로 가는 것이 비용이 더 적은 경우
if cost < distance[i[0]]:
distance[i[0]] = cost
heapq.heappush(q, (cost, i[0]))
# 노드의 개수와 간선의 개수 입력
V, E = map(int, input().split())
INF = int(1e9)
# 시작노드
start = int(input())
# 그래프, 거리 초기화
graph = [[] for _ in range(V + 1)]
distance = [INF] * (V + 1)
# 모든 간선 정보 입력
for _ in range(E):
u, v, w = map(int, input().split())
graph[u].append((v, w))
dijkstra(start)
# 시작 노드로부터 갈 수 없는 경우 INF출력
for i in range(1, V + 1):
if distance[i] == INF:
print('INF')
else:
print(distance[i])
Reference
この問題について(BOJ 1753. 最短パス(python)), 我々は、より多くの情報をここで見つけました https://velog.io/@jinho0705/BOJ-1753.-최단경로pythonテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol