Python/백준

11404_플로이드

728x90

https://www.acmicpc.net/problem/11404

 

11404번: 플로이드

첫째 줄에 도시의 개수 n이 주어지고 둘째 줄에는 버스의 개수 m이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가

www.acmicpc.net

 

 

해당 문제역시 이전에 풀었던 방법을 그대로 적용해보았더니 잘 풀렸다 ㅎㅎ

 

최단경로를 구하는 문제나 미확인 도착지를 한번 보고 오는걸 추천한다!

 

 

import sys
import heapq
input = sys.stdin.readline
INF = int(1e9)

n = int(input())
m = int(input())
graph = [ [] for _ in range(n+1)]

for _ in range(m):
    a,b,c = map(int,input().split())
    graph[a].append((b,c))

def f(start):
    dist = [INF] * (n+1)
    dist[start] = 0
    q = []
    heapq.heappush(q,(start,0))
    while q:
        node,cnt = heapq.heappop(q)

        if dist[node] < cnt:
            continue

        for i,j in graph[node]:
            if dist[i] > cnt + j:
                dist[i] = cnt + j
                heapq.heappush(q,(i,cnt+j))

    for i in range(1,n+1):
        print(0 if dist[i] == INF else dist[i],end=' ')
    print('')

for i in range(1,n+1):
    f(i)
728x90

'Python > 백준' 카테고리의 다른 글

1956_운동  (0) 2022.04.12
10217_KCM Travel  (0) 2022.04.10
11657_타임머신(벨만포드)  (0) 2022.04.08
1504_특정한 최단경로  (0) 2022.04.06
1753_최단경로  (0) 2022.04.05