成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

數(shù)據(jù)結(jié)構(gòu)與算法(回溯法) --javascript語(yǔ)言描述

Bamboy / 2967人閱讀

摘要:思路這是一個(gè)可以用回朔法解決的典型題。由于回朔法的遞歸特性,路徑可以被開(kāi)成一個(gè)棧。機(jī)器人的運(yùn)動(dòng)范圍地上有一個(gè)行和列的方格。當(dāng)它準(zhǔn)備進(jìn)入坐標(biāo)為的格子時(shí),通過(guò)檢查坐標(biāo)的數(shù)位和來(lái)判斷機(jī)器人是否能夠進(jìn)入。

矩陣中的路徑

請(qǐng)?jiān)O(shè)計(jì)一個(gè)函數(shù),用來(lái)判斷在一個(gè)矩陣中是否存在一條包含某字符串所有字符的路徑。路徑可以從矩陣中的任意一個(gè)格子開(kāi)始,每一步可以在矩陣中向左,向右,向上,向下移動(dòng)一個(gè)格子。如果一條路徑經(jīng)過(guò)了矩陣中的某一個(gè)格子,則該路徑不能再進(jìn)入該格子。 例如 a b c e s f c s a d e e 矩陣中包含一條字符串"bcced"的路徑,但是矩陣中不包含"abcb"路徑,因?yàn)樽址牡谝粋€(gè)字符b占據(jù)了矩陣中的第一行第二個(gè)格子之后,路徑不能再次進(jìn)入該格子。

思路:

這是一個(gè)可以用回朔法解決的典型題。

1.首先,在矩陣中任選一個(gè)格子作為路徑的起點(diǎn)。如果路徑上的第i個(gè)字符不是ch,那么這個(gè)格子不可能處在路徑上的第i個(gè)位置。如果路徑上的第i個(gè)字符正好是ch,那么往相鄰的格子尋找路徑上的第i+1個(gè)字符。除在矩陣邊界上的格子之外,其他格子都有4個(gè)相鄰的格子。重復(fù)這個(gè)過(guò)程直到路徑上的所有字符都在矩陣中找到相應(yīng)的位置。

2.由于回朔法的遞歸特性,路徑可以被開(kāi)成一個(gè)棧。當(dāng)在矩陣中定位了路徑中前n個(gè)字符的位置之后,在與第n個(gè)字符對(duì)應(yīng)的格子的周?chē)紱](méi)有找到第n+1個(gè)字符,這個(gè)時(shí)候只要在路徑上回到第n-1個(gè)字符,重新定位第n個(gè)字符。

3.由于路徑不能重復(fù)進(jìn)入矩陣的格子,還需要定義和字符矩陣大小一樣的布爾值矩陣,用來(lái)標(biāo)識(shí)路徑是否已經(jīng)進(jìn)入每個(gè)格子。 當(dāng)矩陣中坐標(biāo)為(row,col)的格子和路徑字符串中相應(yīng)的字符一樣時(shí),從4個(gè)相鄰的格子(row,col-1),(row-1,col),(row,col+1)以及(row+1,col)中去定位路徑字符串中下一個(gè)字符

4.如果4個(gè)相鄰的格子都沒(méi)有匹配字符串中下一個(gè)的字符,表明當(dāng)前路徑字符串中字符在矩陣中的定位不正確,我們需要回到前一個(gè),然后重新定位。

5.一直重復(fù)這個(gè)過(guò)程,直到路徑字符串上所有字符都在矩陣中找到合適的位置。

function hasPath(matrix, rows, cols, str) {
  let visited = [];
  for (let i = 0; i < rows * cols; i++) {
    visited[i] = false;
  }
  let pathLen = 0;
  for (let i = 0; i < rows; i++) {????
    for (let j = 0; j < cols; j++) {??????
      if (hasPathCore(matrix,rows,cols,i,j,str,pathLen,visited)) {????????
        return true;????????
      }??????
    }??
  }
  return false;
}

function hasPathCore(matrix,rows,cols,i,j,str,pathLen,visited) {
  if(str.length === pathLen) {
    return true;
  }
  let hasPath = false;
  if(i>=0 && i=0 && j
機(jī)器人的運(yùn)動(dòng)范圍

地上有一個(gè)m行和n列的方格。一個(gè)機(jī)器人從坐標(biāo)0,0的格子開(kāi)始移動(dòng),每一次只能向左,右,上,下四個(gè)方向移動(dòng)一格,但是不能進(jìn)入行坐標(biāo)和列坐標(biāo)的數(shù)位之和大于k的格子。 例如,當(dāng)k為18時(shí),機(jī)器人能夠進(jìn)入方格(35,37),因?yàn)?+5+3+7 = 18。但是,它不能進(jìn)入方格(35,38),因?yàn)?+5+3+8 = 19。請(qǐng)問(wèn)該機(jī)器人能夠達(dá)到多少個(gè)格子?

思路:

和前面的題目類(lèi)似,這個(gè)方格也可以看出一個(gè)m*n的矩陣。同樣在這個(gè)矩陣中,除邊界上的格子之外其他格子都有四個(gè)相鄰的格子。

機(jī)器人從坐標(biāo)(0,0)開(kāi)始移動(dòng)。當(dāng)它準(zhǔn)備進(jìn)入坐標(biāo)為(i,j)的格子時(shí),通過(guò)檢查坐標(biāo)的數(shù)位和來(lái)判斷機(jī)器人是否能夠進(jìn)入。如果機(jī)器人能夠進(jìn)入坐標(biāo)為(i,j)的格子,我們接著再判斷它能否進(jìn)入四個(gè)相鄰的格子(i,j-1)、(i-1,j),(i,j+1)和(i+1,j)。

function movingCount(threshold, rows, cols)
{
  let visited = [];
  for(let i = 0; i < rows * cols; i++) {
    visited[i] = false;
  }
  let count = movingCountCore(threshold,rows,cols,0,0,visited);
  return count;
}

function movingCountCore(threshold,rows,cols,i,j,visited) {
  let count = 0;
  if(check(threshold,rows,cols,i,j,visited)) {
    visited[i*cols+j] = true;
    count = 1 + movingCountCore(threshold,rows,cols,i,j-1,visited)
              + movingCountCore(threshold,rows,cols,i,j+1,visited)
              + movingCountCore(threshold,rows,cols,i-1,j,visited)
              + movingCountCore(threshold,rows,cols,i+1,j,visited);
  }
  return count;
}

//check函數(shù)用來(lái)判斷機(jī)器人能否進(jìn)入坐標(biāo)為(i,j)的方格
function check(threshold,rows,cols,i,j,visited) {
  if(i>=0 && i=0 && j0) {
    sum += number%10;
    number = Math.floor(number/10);
  }
  return sum;
}

console.log(movingCount(18,5,5));

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/107503.html

相關(guān)文章

  • 回溯講解--適用于leetcode絕大多數(shù)回溯題目

    摘要:什么是回溯算法回溯法是一種系統(tǒng)搜索問(wèn)題解空間的方法。解空間定義為與數(shù)字長(zhǎng)度相同。最后,為什么要掌握回溯法因?yàn)槎嘶厮莘ㄖ蠊P試?yán)锏暮芏囝}就算不了,起碼成功運(yùn)行到之間是沒(méi)問(wèn)題的。 什么是回溯算法?回溯法是一種系統(tǒng)搜索問(wèn)題解空間的方法。為了實(shí)現(xiàn)回溯,需要給問(wèn)題定義一個(gè)解空間。說(shuō)到底它是一種搜索算法。只是這里的搜索是在一個(gè)叫做解空間的地方搜索。而往往所謂的dfs,bfs都是在圖或者樹(shù)這種數(shù)據(jù)...

    saucxs 評(píng)論0 收藏0
  • 回溯

    摘要:回溯算法主要思想回溯算法的基本思想是從一條路往前走,能進(jìn)則進(jìn),不能進(jìn)則退回來(lái),換一條路再試?;厮菟惴ㄕf(shuō)白了就是窮舉法?;厮菟惴ㄒ步性囂椒?,它是一種系統(tǒng)地搜索問(wèn)題的解的方法。用回溯算法解決問(wèn)題的一般步驟為定義一個(gè)解空間,它包含問(wèn)題的解。 回溯算法 主要思想 回溯算法的基本思想是:從一條路往前走,能進(jìn)則進(jìn),不能進(jìn)則退回來(lái),換一條路再試。八皇后問(wèn)題就是回溯算法的典型,第一步按照順序放一個(gè)皇...

    ctriptech 評(píng)論0 收藏0
  • 思想

    摘要:基礎(chǔ)算法思想類(lèi)別遞推枚舉遞歸分治貪婪回溯試探模擬遞推遞推分類(lèi)順推法從已知條件出發(fā),逐步推算出要解決問(wèn)題的方法。貪心算法的局限不能保證最后的解是最優(yōu)的不能求最大最小解問(wèn)題只能求滿足某些約束條件的可行解范圍。 基礎(chǔ)算法思想類(lèi)別 遞推 枚舉 遞歸 分治 貪婪 回溯(試探) 模擬 遞推 遞推分類(lèi) 順推法:從已知條件出發(fā),逐步推算出要解決問(wèn)題的方法。 逆推法:從已知結(jié)果出發(fā),用迭代表達(dá)式...

    sshe 評(píng)論0 收藏0
  • 校招社招必備核心前端面試問(wèn)題詳細(xì)解答

    摘要:本文總結(jié)了前端老司機(jī)經(jīng)常問(wèn)題的一些問(wèn)題并結(jié)合個(gè)人總結(jié)給出了比較詳盡的答案。網(wǎng)易阿里騰訊校招社招必備知識(shí)點(diǎn)。此外還有網(wǎng)絡(luò)線程,定時(shí)器任務(wù)線程,文件系統(tǒng)處理線程等等。線程核心是引擎。主線程和工作線程之間的通知機(jī)制叫做事件循環(huán)。 showImg(https://segmentfault.com/img/bVbu4aB?w=300&h=208); 本文總結(jié)了前端老司機(jī)經(jīng)常問(wèn)題的一些問(wèn)題并結(jié)合個(gè)...

    DevTalking 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<