알고리즘

[백준 11404번 파이썬] 플로이드

로드존슨 2023. 3. 14. 18:43
728x90

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

 

11404번: 플로이드

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

www.acmicpc.net

1.아이디어

-모든점-> 모든점 : 플로이드 문제

-비용배열

-간선의 비용 대입

-거쳐서 비용 줄어들 경우, 갱신 ( for문 3번)

 

2. 시간 복잡도 (for문 3번)

-플로이드 :O(V^3)  ( V=간선의  갯수)

 

3. 변수

-비용배열 

 

 

 

 

import sys
input = sys.stdin.readline
INF = sys.maxsize

n=int(input())
m=int(input())
rs=[[INF]*(n+1) for _ in range(n+1)]

for i in range(1,n+1):
  rs[i][i]=0               #자기자신으로 가는건 0으로 초기화
for i in range(m):
  a,b,c=map(int,input().split())
  rs[a][b]=min(rs[a][b],c)  #a에서 b까지 가는 방법이 많다. 그중에서 min값을 넣어준다.

#j에서 i까지 가는데 k를 거친다.

for k in range(1,n+1):
  for j in range(1,n+1):
    for i in range(1,n+1):
      if rs[j][i]>rs[j][k]+rs[k][i]:
         rs[j][i]=rs[j][k]+rs[k][i]

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