https://www.acmicpc.net/problem/11404
ํ๋ก์ด๋-์์ฌ ์๊ณ ๋ฆฌ์ฆ์ ์ฐ๋ ๋ฌธ์ .
๋ชจ๋ ๋ ธ๋ ์์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ ์ ์๋ค. ์๊ฐ ๋ณต์ก๋๋ O(N^3)
ํ์ด๊ณผ์
cost = [[INF for _ in range(N + 1)] for _ in range(N + 1)]
for i in range(1, N + 1):
for j in range(1, N + 1):
if i == j:
cost[i][j] = 0
for i in range(m):
a, b, c = map(int,sys.stdin.readline().rstrip().split())
if cost[a][b] > c:
cost[a][b] = c
๋จผ์ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ๋ฅผ ํด์ค๋ค. ์๊ธฐ์์ ๊ณผ์ ๊ฑฐ๋ฆฌ๋ 0์ผ๋ก ์ด๊ธฐํ ํด์ฃผ๊ณ ๋๋จธ์ง๋ ์ฃผ์ด์ง ์ ๋ ฅ๊ฐ์ ๋ฃ์ด์ค๋ค.
๋ฌธ์ ์์ "์์ ๋์์ ๋์ฐฉ ๋์๋ฅผ ์ฐ๊ฒฐํ๋ ๋ ธ์ ์ ํ๋๊ฐ ์๋ ์ ์๋ค." ๋ผ๊ณ ํ์ผ๋ฏ๋ก ๋ ธ๋์ฌ์ด ๊ฑฐ๋ฆฌ์ค ์ต์๊ฐ์ ๋ฃ๋๋ก ํ๋ค.
for k in range(N + 1):
for i in range(N + 1):
for j in range(N + 1):
cost[i][j] = min(cost[i][j],cost[i][k] + cost[k][j])
ํ๋ก์ด๋ ์์ฌ ์๊ณ ๋ฆฌ์ฆ์ ์ฝ๋๋ก ๋ํ๋ด๋ฉด ๋งค์ฐ ๊ฐ๊ฒฐํ๋ค.
์ถ๋ฐ์ i, ๋์ฐฉ์ j ๊ทธ๋ฆฌ๊ณ ์ค๊ฐ์ ๊ฑฐ์ณ๊ฐ๋ ์ง์ k ๊ฐ ์์๋, ๊ธฐ์กด์ ์๋ ์ต๋จ๊ฑฐ๋ฆฌ(cost[i][j])์ k๋ฅผ ๊ฑฐ์ณ๊ฐ๋ ์ต๋จ๊ฑฐ๋ฆฌ(cost[i][k] + cost[k][j]) ๋ฅผ ๋น๊ตํด์ ์ต์๊ฐ์ ์ ๋ฐ์ดํธ ํด์ฃผ๋ฉด ๋๋ค.
์ ์ฒด ์ฝ๋
import sys
INF = int(1e9)
N = int(input())
m = int(input())
bus = []
cost = [[INF for _ in range(N + 1)] for _ in range(N + 1)]
for i in range(1, N + 1):
for j in range(1, N + 1):
if i == j:
cost[i][j] = 0
for i in range(m):
a, b, c = map(int,sys.stdin.readline().rstrip().split())
if cost[a][b] > c:
cost[a][b] = c
for k in range(N + 1):
for i in range(N + 1):
for j in range(N + 1):
cost[i][j] = min(cost[i][j],cost[i][k] + cost[k][j])
# print(cost)
for i in range(1, N + 1):
for j in range(1, N + 1):
if cost[i][j] == int(1e9):
print(0, end=' ')
else:
print(cost[i][j],end=' ')
print()
'๐งฉ Problem Solving > [๋ฐฑ์ค]' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1389 ์ผ๋น ๋ฒ ์ด์ปจ์ 6๋จ๊ณ ๋ฒ์น (python ํ์ด์ฌ) (0) | 2022.06.19 |
---|---|
[๋ฐฑ์ค] 7562 ๋์ดํธ์ ์ด๋ (python ํ์ด์ฌ) (0) | 2022.06.18 |
[๋ฐฑ์ค] 17070 ํ์ดํ ์ฎ๊ธฐ๊ธฐ 1 (python ํ์ด์ฌ) (0) | 2022.06.16 |
[๋ฐฑ์ค] 10026 ์ ๋ก์์ฝ(python ํ์ด์ฌ) (0) | 2022.06.15 |
[๋ฐฑ์ค] 1655 ๊ฐ์ด๋ฐ๋ฅผ๋งํด์ (python ํ์ด์ฌ) (0) | 2022.06.14 |