DEV Community

ZeeshanAli-0704
ZeeshanAli-0704

Posted on

Cheapest Flights Within K Stops

Cheapest Flights Within K Stops

/**
 * @param {number} n
 * @param {number[][]} flights
 * @param {number} src
 * @param {number} dst
 * @param {number} k
 * @return {number}
 */
var findCheapestPrice = function (n, flights, src, dst, k) {
  // graph array of array
  let graph = new Array(n).fill().map((_) => new Array());

  for (let flight of flights) {
    // from node => [ destination, price, stops]
    // inititally all stops distance is zero
    graph[flight[0]].push([flight[1], flight[2]]);
  }

  let distance = new Array(n).fill(Infinity);
  distance[src] = 0;
  // stops, source, cost
  let queue = [[0, src, 0]];

  // initially all distance infinity

  while (queue.length) {
    let node = queue.shift();

    let stops = node[0];
    let source = node[1];
    let cost = node[2];

    // if steps reached max
    if (stops > k) continue;
    for (let neighbor of graph[source]) {
      // destination
      let next_id = neighbor[0];
      // costing
      let next_ds = neighbor[1] + cost;
      // next stop
      let next_st = 1 + stops;

      if (next_ds < distance[next_id] && stops <= k) {
        distance[next_id] = next_ds;
        queue.push([next_st, next_id, next_ds]);
      }
    }
  }

  return distance[dst] === Infinity ? -1 : distance[dst];
};


Enter fullscreen mode Exit fullscreen mode

Top comments (0)