알고리즘/리트코드
LeetCode 787. Cheapest Flights Within K Stops
현진이에오
2023. 1. 26. 13:27
먼저 Map을 사용하여 인접리스트를 만들어줍니다.
인접리스트를 잘 채워준 이후에 큐를 선언하고 출발지부터 넣어줍니다.
while 문을 돌면서 queue를 거리순으로 정렬하고 가장 거리가 가까운 것 부터 방문해나갑니다.
방문했던 곳에서는 방문했던 곳에서부터 더 방문할 수 있는 수를 확인해서 현재 방문할 수 있는 개수 - 1 보다 더 많이 방문할 수 있다면 continue를 해줍니다.
모든 간선을 사용하거나 도착지에 도착하면 while 문이 종료됩니다.
const findCheapestPrice = function(_, flights, src, dst, K) {
const adjacencyList = new Map();
for(const [start, end, cost] of flights) {
if(adjacencyList.has(start)) adjacencyList.get(start).push([end, cost]);
else adjacencyList.set(start, [[end, cost]]);
}
const queue = [[0, src, K+1]];
const visited = new Map();
while(queue.length) {
queue.sort((a, b) => a[0] - b[0]);
const [cost, city, stops] = queue.shift();
visited.set(city, stops);
if(city === dst) return cost;
if(stops == 0 || !adjacencyList.has(city)) {
continue;
}
for(const [nextCity, nextCost] of adjacencyList.get(city)) {
if(visited.has(nextCity) && visited.get(nextCity) >= stops-1) continue;
queue.push([cost+nextCost, nextCity, stops-1]);
}
}
return -1;
};