廣度優(yōu)先搜索-鐘馗抓鬼

廣度優(yōu)先搜索

可用于: 查找是否可以從 A 到 B 2.從 A 到 B 最少走幾步

實現(xiàn)思路:

  1. 將圖的內(nèi)容存在散列表中,針對一個節(jié)點(入口)轩勘,可以得到它的所有鄰居節(jié)點(出口)
  2. 將第一層節(jié)點推入隊列朽肥,彈出第一個進(jìn)行循環(huán)判斷叛氨,在隊列不為 0 的條件下始終執(zhí)行循環(huán)
  3. 循環(huán)中判斷當(dāng)前節(jié)點是否為目標(biāo)節(jié)點瘪吏,如果不是記錄已判斷過铃彰,如果是則結(jié)束。

廣度優(yōu)先搜索使用-鐘馗抓鬼

題目:

追趕妖怪

Description
一身正氣的鐘馗四處降妖歇式,一天他發(fā)現(xiàn)一只狐妖正在禍害百姓驶悟,他連忙追趕上去準(zhǔn)備除妖,可是狐妖很聰明贬丛,她自知敵不過鐘馗撩银,便逃入山林给涕,企圖消耗鐘馗的體力豺憔。鐘馗在樹林里面可以自由移動,而且他有一個法術(shù):可以從當(dāng)前坐標(biāo)(x,y)直接移動到(2x,2y)的位置够庙。鐘馗為了不枉送性命恭应,找到人稱"人間諸葛亮"的你,希望你能幫他判斷他能否在體力未耗盡到達(dá)狐妖的藏匿地點(如果到達(dá)狐妖藏身之處還剩余0點體力也是可以的)耘眨。
注意:鐘馗一開始擁有n點體力昼榛,每次普通移動或者使用法術(shù)移動會消耗1點體力值,當(dāng)體力消耗完畢(n<=0)便無法再進(jìn)行移動剔难。
現(xiàn)在給鐘馗移動方式一個規(guī)定:
a.如果鐘馗不使用法術(shù)胆屿,他可以從(x,y)移動到(x-1,y),(x+1,y),(x,y-1),(x,y+1)中的任意一個位置.
b.如果鐘馗使用法術(shù),他可以從當(dāng)前坐標(biāo)(x,y)直接移動到(2x,2y)的位置.

Input
輸入包含3行偶宫。

第一行包含一個數(shù)字n非迹,表示鐘馗的初始體力值。1<n<=500

第二行兩個整數(shù)表示鐘馗初始坐標(biāo)纯趋。

第三行兩個整數(shù)表示狐妖藏匿坐標(biāo)憎兽。

注意:狐妖不會移動。樹林可以看做一個矩形吵冒,四個角的坐標(biāo)分別為(0,0),(0,500),(500,0),(500,500)纯命。鐘馗移動的位置不能超出樹林的范圍。

Output
輸出只有一行痹栖。

如果鐘馗能夠到達(dá)狐妖藏匿位置輸出"YES",如果鐘馗無法到達(dá)狐妖藏匿位置輸出"NO"

Sample Input

50
4 4
9 9
5
0 0
0 5
1
0 0
1 0
1
0 0
2 2
1
0 0
500 500

Sample Output

YES
YES
YES
NO
NO

解法:

function canGetLoc(n, zLoc, hLoc) {
  const [ zX, zY ] = zLoc;  // 鐘馗初始坐標(biāo)
  const [ hX, hY ] = hLoc;  // 狐妖坐標(biāo)
  let queue = []; // 模擬隊列
  const travePath = []; // 已經(jīng)過的路亿汞,標(biāo)記
  let canCatch = false;
  let step = 1;
  
  // 模擬散列表的一個散列函數(shù)
  function getMap(x, y, z) {
    const r = [];
    const newZ = z + 1;
    if(x + 1 <= 500) {
      r.push([x + 1, y, newZ]);
    }
    if(x -1 >= 0) {
      r.push([x - 1, y, newZ]);
    }
    if(y+1 <= 500){
      r.push([x, y+1, newZ])
    }
    if(y-1 >= 0) {
      r.push([x, y-1, newZ]);
    }
    if(2*x <= 500 && 2*y <= 500) {
      r.push([2*x, 2*y, newZ]);
    }
    return r;
  }

  queue = queue.concat(getMap(zX, zY, 0));

  while (queue.length > 0) {
      // 只要不達(dá)到目標(biāo)就一直走
      // 彈出
      const target = queue.shift();
      const [ tX, tY, tZ ] = target;
      const flag = `${tX}_${tY}`;
      if(tZ > n) {
        // 已無法捕獲
        break;
      }
      if(travePath.includes(flag)) {
          // 之前已經(jīng)經(jīng)過了一次
          continue;
      }

      travePath.push(flag);
      if(hX === tX && hY === tY) {
        // 抓到了
        step = tZ;
        canCatch = true;
        break;
      } else if(tX > 500 || tY > 500 || tX < 0 || tY < 0) {
        // 超出范圍了
        continue;
      } else {
          // 沒超出范圍也沒抓到,就把當(dāng)前節(jié)點的鄰居再壓入隊列
          queue = queue.concat(getMap(tX, tY, tZ));
      }
  } 

  console.log('停了', canCatch, n, step);
  return canCatch && step <= n ? 'YES' : 'NO';
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末揪阿,一起剝皮案震驚了整個濱河市疗我,隨后出現(xiàn)的幾起案子匙铡,更是在濱河造成了極大的恐慌,老刑警劉巖碍粥,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鳖眼,死亡現(xiàn)場離奇詭異,居然都是意外死亡嚼摩,警方通過查閱死者的電腦和手機钦讳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來枕面,“玉大人愿卒,你說我怎么就攤上這事〕泵兀” “怎么了琼开?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長枕荞。 經(jīng)常有香客問我柜候,道長,這世上最難降的妖魔是什么躏精? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任渣刷,我火速辦了婚禮,結(jié)果婚禮上矗烛,老公的妹妹穿的比我還像新娘辅柴。我一直安慰自己,他們只是感情好瞭吃,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布碌嘀。 她就那樣靜靜地躺著,像睡著了一般歪架。 火紅的嫁衣襯著肌膚如雪股冗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天牡拇,我揣著相機與錄音魁瞪,去河邊找鬼。 笑死惠呼,一個胖子當(dāng)著我的面吹牛导俘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播剔蹋,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼旅薄,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起少梁,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤洛口,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后凯沪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體第焰,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年妨马,在試婚紗的時候發(fā)現(xiàn)自己被綠了挺举。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡烘跺,死狀恐怖湘纵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情滤淳,我是刑警寧澤梧喷,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站脖咐,受9級特大地震影響铺敌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜文搂,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一适刀、第九天 我趴在偏房一處隱蔽的房頂上張望秤朗。 院中可真熱鬧煤蹭,春花似錦、人聲如沸取视。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽作谭。三九已至稽物,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間折欠,已是汗流浹背贝或。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留锐秦,地道東北人咪奖。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像酱床,于是被迫代替她去往敵國和親羊赵。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容