(MEDIUM) https://leetcode.com/problems/cheapest-flights-within-k-stops/
Dijkstra 알고리즘 을 생각했으나, 해당 알고리즘은 최소 경로를 찾는데 유용하기에 k개 이하의 node를 거친다는 constraint가 존재할 경우 사용하기에 적절하지 않다는 생각이 들었다. Bellman-Ford 알고리즘 이다. 해당 알고리즘은 vertex의 수 - 1 번 모든 vertex에 대해 연결된 타 vertex를 거쳐 오는 게 더 짧은지 비교하는 알고리즘으로 그래프 내에 음수 distance가 존재하더라도 풀 수 있다. class Solution:
def findCheapestPrice(self, n: int, flights: List[List[int]], src: int, dst: int, k: int) -> int:
graph = [[] for _ in range(n)]
for f, t, p in flights:
graph[f].append((t, p))
k += 1
visited_price = [[10 ** 6] * n for _ in range(k+1)]
visited_price[0][src] = 0
for idx in range(1, k+1):
for now_node in range(n):
if visited_price[idx-1][now_node] < 10**6:
for next_node, price in graph[now_node]:
visited_price[idx][next_node] = min(visited_price[idx][next_node], visited_price[idx-1][now_node] + price)
min_price = min(visited_price[idx][dst] for idx in range(k+1))
return -1 if min_price == 10**6 else min_price
