亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

迷宮不循環的 BFS 算法 - Javascript

迷宮不循環的 BFS 算法 - Javascript

ITMISS 2023-03-03 10:10:38
我正在嘗試使用 BFS 算法來解決迷宮問題,我在一個數組中表示該迷宮,其中所有元素都以 999 開頭,但中心(目標)為 0。我試圖讓代碼從 0 開始并分支四種方式(北/南/東/西),如果數字大于父級,則將父級編號加 1。初始循環應該在中間有一個 0,四個相鄰單元格應該從 999 更新為 1。這應該循環直到算法到達位置 0,0。不幸的是,我似乎無法讓循環運行——我可以將前四個元素更新為 1,然后它就停止了。我認為這與我的隊列如何/沒有被拾取為下一個循環的 (y,x) 輸入有關,但我似乎無法改變這一點。這是一項任務,因此不是在尋找解決方案,而是在幫助我了解我在循環中缺少什么方面的任何幫助將不勝感激。我已經在下面顯示了數組代碼 (mazeD) 和 BFS/flood 代碼// maze array showing numerical distancelet 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 functionfunction flood(x, y, d) {  let queue = []  queue.push([y, x]);  while (queue.length > 0) {    queue.shift();    let fillArr = [      [+y - 1, +x],      [+y, +x - 1],      [+y, +x + 1],      [+y + 1, +x],    ];    if ((x < 10) && (y < 10)) {      d++;      for (let [yy, xx] of fillArr) {      if (mazeD[yy][xx] > d) {        queue.push([yy, xx]);        mazeD[yy][xx] = d;        console.log("queue =" +queue)      }    }   } }}flood(5, 5, 0);console.log(mazeD);
查看完整描述

2 回答

?
ABOUTYOU

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);


查看完整回答
反對 回復 2023-03-03
?
翻過高山走不出你

TA貢獻1875條經驗 獲得超3個贊

我認為您可能在這一行中遇到問題:

queue.shift()

似乎您永遠不會讀取存儲在隊列中的值,因此循環中的坐標永遠不會更新,這意味著您總是在檢查相同的位置。您可能希望將 的值賦給queue.shift()一個變量并使用這些坐標繼續搜索。


查看完整回答
反對 回復 2023-03-03
  • 2 回答
  • 0 關注
  • 147 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號