Cheapest flight within K stops

Graphs Shortest Path Algorithms Hard
  • This problem underpins the fundamental operations of various travel and accommodation booking apps such as Expedia, Skyscanner, or Google Flights
  • These platforms utilize algorithms rooted in graph theory to find the cheapest or most convenient routes between locations by considering factors such as price, transit cities (stops), and directness of the route
  • The problem is essentially a variant of the shortest path problem with a constraint on the number of edges, which translates to the maximum number of stops in a flight journey in applications

There are n cities and m edges connected by some number of flights. Given an array of flights where flights[i] = [ fromi, toi, pricei] indicates that there is a flight from city fromi to city to with cost price. Given three integers src, dst, and k, and return the cheapest price from src to dst with at most k stops. If there is no such route, return -1.

Examples:


Input: n = 4, flights = [[0,1,100],[1,2,100],[2,0,100],[1,3,600],[2,3,200]], src = 0, dst = 3, k = 1

Output: 700

Explanation: The optimal path with at most 1 stops from city 0 to 3 is marked in red and has cost 100 + 600 = 700.

Note that the path through cities [0,1,2,3] is cheaper but is invalid because it uses 2 stops.


Input: n = 3, flights = [[0,1,100],[1,2,100],[0,2,500]], src = 0, dst = 2, k = 1

Output: 200

Explanation:The optimal path with at most 1 stops from city 0 to 2 is marked in red and has cost 100 + 100 = 200.

Input: n = 3, flights = [[0, 1, 100], [1, 2, 100], [0, 2, 500]], src = 0, dst = 2, k = 0 

Constraints

  •   1 <= n <= 100
  •   0 <= flights.length <= (n * (n - 1) / 2)
  •    flights[i].length == 3
  •   0 <= fromi, toi < n
  •   fromi != toi
  •   1 <= pricei <= 104
  •   There will not be any multiple flights between the two cities.
  •   0 <= src, dst, k < n

Hints

  • Since we must limit the number of stops (k), a BFS-like approach with a priority queue (similar to Dijkstra’s) is ideal. Instead of using a standard dist[] array (which tracks the shortest path without considering stops), we use a tuple (cost, node, stops) in a min-heap (priority queue).
  • If we reach dst within k+1 levels (since k refers to intermediate stops, not total edges), return the cost.

Company Tags

OYO Rooms Cerner AMD Cloudflare HCL Technologies Zomato Walmart Pinterest Twilio PwC JPMorgan Chase Ubisoft eBay Bungie Freshworks Roche Instacart McKinsey & Company IBM Deloitte Intel Mastercard Teladoc Health NVIDIA Epic Games Google Microsoft Amazon Meta Apple Netflix Adobe