문제링크
문제풀이
function solution(rectangle, characterX, characterY, itemX, itemY) {
let answer =0;
let dx=[1,0,-1,0];
let dy=[0,1,0,-1];
let queue=[];
characterX*=2;
characterY*=2;
itemX*=2;
itemY*=2;
let road=Array.from({length:102},()=>Array(102).fill(0));
let ch=Array.from({length:102},()=>Array(102).fill(0));
let dis=Array.from({length:102},()=>Array(102).fill(0));
rectangle.forEach((rec)=>{
let [x1,y1,x2,y2]=rec.map((it)=>it*2);
for(let x=x1;x<=x2;x++){
for(let y=y1;y<=y2;y++){
if(x===x1||x===x2||y===y1||y===y2){
if(!road[y][x]){
road[y][x]=1;
}
}else{
road[y][x]=2;
}
}
}
});
queue.push([characterY,characterX]);
ch[characterY][characterX]=1;
while(queue.length){
let [y,x]=queue.shift();
if(y===itemY && x===itemX){
break;
}
for(let i=0;i<4;i++){
let y1=y+dy[i];
let x1=x+dx[i];
if(road[y1][x1]===1 && ch[y1][x1]===0){
queue.push([y1,x1]);
ch[y1][x1]=1;
dis[y1][x1]=dis[y][x]+1;
}
}
}
return dis[itemY][itemX]/2;
}