~๋ชฉ์ฐจ~
๋ฌธ์
https://www.acmicpc.net/problem/11404
๋ฌธ์ ํด๊ฒฐ ํฌ์ธํธ
- ํ๋ก์ด๋ ์์ ์๊ณ ๋ฆฌ์ฆ
- graph : 2์ฐจ์ ๋ฐฐ์ด๋ก ๋ ธ๋ ๋ณ ๊ฐ ๋ ธ๋๊น์ ์ต์ ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ฅํ๋ค. graph[i][j] ๋ i์์ j๋ก ๊ฐ๊ธฐ ์ํ ์ต์ ์ด๋ ๊ฑฐ๋ฆฌ๋ฅผ ์๋ฏธํจ
- ๊ฐ ๊ฐ์ ์ ๋ณด๋ฅผ ๋ฐ๋ผ ๋ฌดํ์(INF)๋ก ์ด๊ธฐํ ํ graph๋ฅผ ์์ ํ๋ค. ๋์ผํ ๋ ธ์ ์ ๊ธธ์ด๊ฐ ๋ค๋ฅธ ๊ฐ์ ์ด ์์์ผ๋ก ์ฃผ์ ํ์
- a -> b ๋ ธ์ ์ ๋ํด์ k๋ฅผ ๊ฑฐ์ณ๊ฐ๋ ๊ฒฝ์ฐ์ ๋น๊ตํ์ฌ ์์ ๊ฐ์ผ๋ก ์ ๋ฐ์ดํธ ํ๋ค.
a = b๋ผ๋ฉด ๊ฑฐ๋ฆฌ๋ 0์ด๋ค.
- 3์ค for๋ฌธ ์ข ๋ฃ ํ ๊ฐ ๋ ธ๋์ ๋ํด ์ต๊ณ ๊ธธ์ด๊ฐ ์ ์ฅ๋ graph๋ฅผ ๋ ธ๋ 1๋ถํฐ ์ถ๋ ฅํ๋ฉด ๋!
์์ฑ ์ฝ๋
import sys
input = sys.stdin.readline
INF = int(1e9)
n = int(input())
m = int(input())
graph = [[INF]*(n+1) for _ in range(n+1)] # ์ธ์ ํ๋ ฌ
for _ in range(m):
v1, v2, w = map(int, input().split())
graph[v1][v2] = min(graph[v1][v2], w) # (์ฃผ์) ๋์ผํ ๋
ธ์ ์ ๊ฐ์ ์์
for k in range(1, n+1): # ๊ฑฐ์ณ๊ฐ ๋
ธ๋
for a in range(1, n+1): # ์์ ๋
ธ๋
for b in range(1, n+1): # ์ข
๋ฃ ๋
ธ๋
# (a -> k -> b) ์ (a -> b) ๋น๊ตํ์ฌ ์์ ๊ฐ ๋์
graph[a][b] = min(graph[a][b], graph[a][k] + graph[k][b]) if a != b else 0
for i in range(1, n+1):
for j in range(1, n+1):
print(graph[i][j] if graph[i][j] != INF else 0, end=" ") # INF๋ผ๋ฉด 0 ์ถ๋ ฅ
print()
๋์์ด ๋์ จ๋ค๋ฉด ์ข์์ ๋๋ฌ์ฃผ์ธ์๐
REFERENCE
https://claude-u.tistory.com/334