728x90
플로이드 워셜 알고리즘이고 이를 구현할 줄 몰라서 직접 만들었다. 몇가지 dp 업데이트가 잘 안되서 실패했다.
import sys
from collections import deque
from itertools import combinations
def check(k,i,n):
dp = [1000000000]*(n+1) # 0 인덱스는 무시
dp[i] = 0
queue = deque()
check = [ ]
for z in range(0,len(k)):
start = k[z][0]
finish = k[z][1]
price = k[z][2]
if start == i:
if price < dp[finish]:
dp[finish] = price
check.append(k[z])
queue.append(k[z])
print(dp)
while queue:
start, end, price = queue.popleft()
new_price = dp[start] + price
if new_price<dp[end]:
dp[end] = price
for i in range(0,len(k)):
if k[i][0] == end:
if k[i] not in check:
check.append(k[i])
queue.append(k[i])
return dp[1:]
n = int(input()) # 도시 개수
m = int(input()) # 버스 수
k = [ ]
# 출발지, 목적지, 가격
for i in range(m):
a,b,c = list(map(int,sys.stdin.readline().split(" ")))
k.append([a,b,c])
k = list(sorted(k))
for i in range(1,n+1):
# i 번째 버스에서 각 목적지 까지 가격 최솟값 출력
check(k,i,n)
728x90
'🟢 알고리즘 문제 풀이 > Baekjoon' 카테고리의 다른 글
| [파이썬] 백준 1339 단어 수학 (0) | 2023.05.23 |
|---|---|
| [파이썬] 백준 16432 떡장수와 호랑이 (0) | 2023.05.22 |
| [파이썬] 백준 1563 개근상 (0) | 2023.05.16 |
| [파이썬] 백준 13397 구간 나누기 2 (1) | 2023.05.15 |
| [파이썬] 백준 1344 축구 (0) | 2023.05.12 |