第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

迷宮不循環(huán)的 BFS 算法 - Javascript

迷宮不循環(huán)的 BFS 算法 - Javascript

ITMISS 2023-03-03 10:10:38
我正在嘗試使用 BFS 算法來(lái)解決迷宮問(wèn)題,我在一個(gè)數(shù)組中表示該迷宮,其中所有元素都以 999 開頭,但中心(目標(biāo))為 0。我試圖讓代碼從 0 開始并分支四種方式(北/南/東/西),如果數(shù)字大于父級(jí),則將父級(jí)編號(hào)加 1。初始循環(huán)應(yīng)該在中間有一個(gè) 0,四個(gè)相鄰單元格應(yīng)該從 999 更新為 1。這應(yīng)該循環(huán)直到算法到達(dá)位置 0,0。不幸的是,我似乎無(wú)法讓循環(huán)運(yùn)行——我可以將前四個(gè)元素更新為 1,然后它就停止了。我認(rèn)為這與我的隊(duì)列如何/沒有被拾取為下一個(gè)循環(huán)的 (y,x) 輸入有關(guān),但我似乎無(wú)法改變這一點(diǎn)。這是一項(xiàng)任務(wù),因此不是在尋找解決方案,而是在幫助我了解我在循環(huán)中缺少什么方面的任何幫助將不勝感激。我已經(jīng)在下面顯示了數(shù)組代碼 (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貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊

就像這樣:


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


查看完整回答
反對(duì) 回復(fù) 2023-03-03
?
翻過(guò)高山走不出你

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超3個(gè)贊

我認(rèn)為您可能在這一行中遇到問(wèn)題:

queue.shift()

似乎您永遠(yuǎn)不會(huì)讀取存儲(chǔ)在隊(duì)列中的值,因此循環(huán)中的坐標(biāo)永遠(yuǎn)不會(huì)更新,這意味著您總是在檢查相同的位置。您可能希望將 的值賦給queue.shift()一個(gè)變量并使用這些坐標(biāo)繼續(xù)搜索。


查看完整回答
反對(duì) 回復(fù) 2023-03-03
  • 2 回答
  • 0 關(guān)注
  • 144 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)