787. Cheapest Flights Within K Stops

Blue Geometric Technology LinkedIn Banner 1

Problem Link :  787. Cheapest Flights Within K Stops  [LeetCode]

Problem Level : Medium

Topics : Dynamic Programming,   Depth-First Search,   Breadth-First,    SearchGraphHeap (Priority Queue)

Problem Description : 787. Cheapest Flights Within K Stops

There are n cities connected by some number of flights. You are given an array flights where flights[i] = [fromi, toi, pricei] indicates that there is a flight from city fromi to city toi with cost pricei.

You are also given three integers srcdst, and k, return the cheapest price from src to dst with at most k stops. If there is no such route, return -1.

Example 1:

cheapest flights within k stops 3drawio

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 graph is shown above. The optimal path with at most 1 stop 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.

Example 2:

cheapest flights within k stops 1drawio

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

Output:  200

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

Example 3:

cheapest flights within k stops 2drawio

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

Output:  500

Explanation:  The graph is shown above. The optimal path with no stops from city 0 to 2 is marked in red and has cost 500.

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 two cities.
  • 0 <= src, dst, k < n
  • src != dst
Solution :
  1. Graph Representation:

    • The given flights are used to construct an adjacency list graph.
  2. Dijkstra’s Algorithm:

    • A priority queue (minHeap) is used to explore paths with minimum cost.
    • The algorithm iterates until the minHeap is empty.
    • For each iteration, it extracts the minimum distance, current node, and remaining stops from the minHeap.
    • If the current node is the destination, the minimum distance is returned.
    • If the remaining stops are zero, the iteration skips to the next step.
    • For each neighbor of the current node, the algorithm updates the distance and adds the neighbor to the heap.
  3. Time and Space Complexity:

    • The time complexity is determined by the priority queue operations, resulting in O(E + V * log(V)) where E is the number of flights and V is the number of cities.
    • The space complexity is O(V * (K + 1)) for the distance array and O(V) for the priority queue.

Code :

Output :

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

WhatsApp Group Join Now
Telegram Group Join Now
Instagram Group Join Now
Linkedin Page Join Now

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top