2 回答

TA貢獻1812條經驗 獲得超5個贊
就像這樣:
let mazeD = [];
for (let y = 0; y < 10; y++) {
let row = [];
for (let x = 0; x < 10; x++) {
row[x] = 999;
}
mazeD[y] = row;
}
mazeD[5][5] = 0;
// BFS function
function flood(x, y, d) {
let queue = [];
let i = 0;
queue.push([y, x]);
while (i < queue.length) {
[x,y] = queue[i,i];
let fillArr = [
[+y - 1, +x],
[+y, +x - 1],
[+y, +x + 1],
[+y + 1, +x],
];
if ((x < 10) && (y < 10) && x >=0 && y>=0)
{
for (let [yy, xx] of fillArr)
{
if(yy >=0 && yy < 10 && xx>=0 && xx<10)
{
if (mazeD[yy][xx] == 999)
{
queue.push([yy, xx]);
mazeD[yy][xx] = mazeD[y][x]+1;
console.log(xx,yy,mazeD[y][x]+1);
}
if(xx == 0 && yy == 0){
return;
}
}
}
}
i++;
}
}
flood(5, 5, 0);
console.log(mazeD);

TA貢獻1875條經驗 獲得超3個贊
我認為您可能在這一行中遇到問題:
queue.shift()
似乎您永遠不會讀取存儲在隊列中的值,因此循環中的坐標永遠不會更新,這意味著您總是在檢查相同的位置。您可能希望將 的值賦給queue.shift()
一個變量并使用這些坐標繼續搜索。
添加回答
舉報