728x90
Floyd-Warshall ์๊ณ ๋ฆฌ์ฆ
-์ต๋จ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ
-๋งค ๋จ๊ณ๋ง๋ค ๊ฑฐ์ณ๊ฐ๋ ๋ ธ๋ k๋ฅผ ๊ธฐ์ค์ผ๋ก ์ต๋จ๊ฒฝ๋ก๋ฅผ ๊ณ์ฐํ๋ค
-์ฆ, a->b๋ก ๊ฐ๋ ์ต๋จ๊ฑฐ๋ฆฌ์ k๋ฅผ ๊ฑฐ์ณ ๊ฐ๋ a->k->b์ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ๋น๊ตํ์ฌ ํ ์ด๋ธ์ ๊ฐฑ์ ํ๋ค.
-2์ฐจ์ ํ ์ด๋ธ์ ์ต๋จ ๊ฑฐ๋ฆฌ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค (dp์)
๊ตฌํ ๋ฐฉ๋ฒ
1) ์ต๋จ๊ฑฐ๋ฆฌ ํ ์ด๋ธ์ ์ด๊ธฐํํ๋ค. (๊ฐ ๋ ธ๋์์ ์ธ์ ํ ๋ค์ ๋ ธ๋๋ก ๊ฐ๋ ๋ฐ ๋๋ ๋น์ฉ์ ๊ธฐ๋ก)
2) ๊ฐ ๋ ธ๋๋ฅผ ๊ฑฐ์ณ ๊ฐ๋ ๊ฒฝ์ฐ๋ฅผ ๊ณ ๋ คํ๋ฉฐ ํ ์ด๋ธ์ ๊ฐฑ์ ํ๋ค.
ํ์ด์ฌ ์ฝ๋
import sys
input = sys.stdin.readline
INF = int(1e9) #๋งค์ฐ ํฐ ์ซ์์ธ 10์ต์ ๋ฌดํ๋๋ก ์ ์ํ๋ค
#n(๋
ธ๋ ์), m(๊ฐ์ ์) ์
๋ ฅ๋ฐ๊ธฐ
n,m = map(int,input().split())
#์ต๋จ๊ฑฐ๋ฆฌ ์ ๋ณด๋ฅผ ์ ์ฅํ ๋ฆฌ์คํธ (์ด๊ธฐ๊ฐ์ ์ ๋ถ ๋ฌดํ๋๋ก ์ด๊ธฐํ)
graph = [[INF]*(n+1) for _ in range(n+1)]
#์๊ธฐ์์ -> ์๊ธฐ์์ ์ผ๋ก ๊ฐ๋ ๋น์ฉ์ 0์ด๋ฏ๋ก 0์ผ๋ก ์ด๊ธฐํํด์ค๋ค
for i in range(1,n+1):
for j in range(1,n+1):
if i==j:
graph[i][j]=0
#๊ฐ์ ์ ๋ณด ์
๋ ฅ๋ฐ๊ธฐ (a์์ b ๋
ธ๋๋ก ๊ฐ๋ ๋น์ฉ์ด c)
for _ in range(m):
a,b,c = map(int, input().split())
graph[a][b]=c
#Floyd-Warshall ์๊ณ ๋ฆฌ์ฆ ์ํ
for k in range(1,n+1): #๋ชจ๋ ๋
ธ๋๊ฐ k๋ฅผ ๊ฑฐ์ณ๊ฐ๋ ์ต๋จ๊ฒฝ๋ก๋ฅผ ๊ณ์ฐ
for i in range(1,n+1):
for j in rnage(1,n+1):
graph[a][b] = min(graph[a][b], graph[a][k]+graph[k][b])
#๊ฐ ๋
ธ๋๋ณ๋ก ์ต๋จ๊ฒฝ๋ก ์ถ๋ ฅ
for i in range(1,n+1):
for j in range(1,n+1):
if graph[i][j]==INF:
print("๋๋ฌํ ์ ์์",end=' ')
else:
print(graph[a][b],end=' ')
print()
728x90
'์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด > Shortest Path' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค]1753๋ฒ: ์ต๋จ๊ฒฝ๋ก (0) | 2023.02.28 |
---|---|
[๋ฐฑ์ค]18352๋ฒ: ํน์ ๊ฑฐ๋ฆฌ์ ๋์ ์ฐพ๊ธฐ (0) | 2023.02.28 |
๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ (python) (0) | 2023.02.28 |
[์ด์ฝํ ]๋ฏธ๋ ๋์ (0) | 2023.02.27 |
[์ด์ฝํ ]์ ๋ณด (0) | 2023.02.27 |