- Published on
Cheapest Flights within k Stops
- Authors
- Name
- Alex Noh
Introduction
There are n
cities connected by some number of flights. You are given an array flights where flights[i] = [from(i), to(i), price(i)]
indicates that there is a flight from city from(i)
to city to(i)
with cost price(i)
.
You are also given three integers src
, dst
, and k
, return the cheapest price from src
to dst
with at most k
stops. If there is no such route, return -1
.
Solutions
1. Using Dijkstra's algorithm
main.py
from heapq import heappush, heappop
from collections import defaultdict
from typing import List
def cheapest_flights_within_k_stops(n: int, flights: List[List[int]], src: int, dst: int, k: int) -> int:
graph = defaultdict(list)
for from_city, to_city, price in flights:
graph[from_city].append((to_city, price))
priority_queue = [(0, src, k + 1)] # (current_cost, current_city, remaining_stops)
while priority_queue:
current_cost, current_city, remaining_stops = heappop(priority_queue)
if current_city == dst:
return current_cost
if remaining_stops > 0:
for next_city, price in graph[current_city]:
heappush(priority_queue, (current_cost + price, next_city, remaining_stops - 1))
return -1