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];
};