Skip to content

3341-find-minimum-time-to-reach-last-room-i

DevGod
DevGod
Elf Vtuber
/**
* @param {number[][]} moveTime
* @return {number}
*/
var minTimeToReach = function(moveTime) {
let times = Array.from(
{length:moveTime.length},
()=>new Array(moveTime[0].length).fill(Infinity)
);
times[0][0] = 0;
const visit = new Set();
let minPQ = new MinPriorityQueue( (el)=>el[0] );
minPQ.enqueue([moveTime[0][0], [0,0]])
while(!minPQ.isEmpty()){
let node = minPQ.dequeue();
if(visit.has( `${node[1]}` )){
continue;
}
visit.add(`${node[1]}`)
let nodeX = node[1][0];
let nodeY = node[1][1];
let dirs = [
[nodeX-1,nodeY],
[nodeX,nodeY-1],
[nodeX+1,nodeY],
[nodeX,nodeY+1],
];
for(let [X,Y] of dirs){
let neighborT = moveTime[X]?.[Y];
if(neighborT === undefined){
continue;
}
let newT = Math.max(times[nodeX][nodeY], neighborT)+1;
if(newT < times[X][Y]){
times[X][Y] = newT;
minPQ.enqueue(
[ newT , [ X,Y ] ]
)
}
}
}
return times[moveTime.length-1][moveTime[0].length-1];
};