[BOJ] Q11404 연구소

Question

Language: Python

Difficulty: Gold 4

문제의 취지는 노드 a 에서 노드 b로 가는 최소 경로를 구하는 문제인데, a,b가 정해진 게 아닌 모든 노드에 대해서 적용해야하는 ASSP(All Source Shortest Path) 문제이다. –> Floyd-Warshall 알고리즘을 이용해서 풀이하면 된다. 단, a->b 간에 간선이 여러 개가 있을 수 있으니 가장 짧은 거리의 간선만 추가할 수 있도록 한다.

Solution

from math import inf

def floyd_warshall(v,graph):
  for k in range(1,v+1):
    for a in range(1,v+1):
      for b in range(1,v+1):
        graph[a][b]=min(graph[a][b],graph[a][k]+graph[k][b])

if __name__ =="__main__:
  v,e=0,0
  graph=[]

  v=int(input())
  e=int(input())
  graph=[[math.inf for _ in range(v+1)] for _ in range(v+1)]
  for i in range(1,v+1):
      for j in range(1,v+1):
        if i==j:
          graph[i][j]=0

  for _ in range(e):
      v1,v2,cost=map(int,input().split())
      if cost<graph[v1][v2]:
          graph[v1][v2]=cost

      
  floyd_warshall(v,graph)

  for i in range(1,v+1):
      for j in range(1,v+1):
          if graph[i][j]==inf:
              graph[i][j]=0
          print(graph[i][j],end=" ")
      print()

댓글남기기