国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

數據結構與算法(回溯法) --javascript語言描述

Bamboy / 2963人閱讀

摘要:思路這是一個可以用回朔法解決的典型題。由于回朔法的遞歸特性,路徑可以被開成一個棧。機器人的運動范圍地上有一個行和列的方格。當它準備進入坐標為的格子時,通過檢查坐標的數位和來判斷機器人是否能夠進入。

矩陣中的路徑

請設計一個函數,用來判斷在一個矩陣中是否存在一條包含某字符串所有字符的路徑。路徑可以從矩陣中的任意一個格子開始,每一步可以在矩陣中向左,向右,向上,向下移動一個格子。如果一條路徑經過了矩陣中的某一個格子,則該路徑不能再進入該格子。 例如 a b c e s f c s a d e e 矩陣中包含一條字符串"bcced"的路徑,但是矩陣中不包含"abcb"路徑,因為字符串的第一個字符b占據了矩陣中的第一行第二個格子之后,路徑不能再次進入該格子。

思路:

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

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

2.由于回朔法的遞歸特性,路徑可以被開成一個棧。當在矩陣中定位了路徑中前n個字符的位置之后,在與第n個字符對應的格子的周圍都沒有找到第n+1個字符,這個時候只要在路徑上回到第n-1個字符,重新定位第n個字符。

3.由于路徑不能重復進入矩陣的格子,還需要定義和字符矩陣大小一樣的布爾值矩陣,用來標識路徑是否已經進入每個格子。 當矩陣中坐標為(row,col)的格子和路徑字符串中相應的字符一樣時,從4個相鄰的格子(row,col-1),(row-1,col),(row,col+1)以及(row+1,col)中去定位路徑字符串中下一個字符

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

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

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
機器人的運動范圍

地上有一個m行和n列的方格。一個機器人從坐標0,0的格子開始移動,每一次只能向左,右,上,下四個方向移動一格,但是不能進入行坐標和列坐標的數位之和大于k的格子。 例如,當k為18時,機器人能夠進入方格(35,37),因為3+5+3+7 = 18。但是,它不能進入方格(35,38),因為3+5+3+8 = 19。請問該機器人能夠達到多少個格子?

思路:

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

機器人從坐標(0,0)開始移動。當它準備進入坐標為(i,j)的格子時,通過檢查坐標的數位和來判斷機器人是否能夠進入。如果機器人能夠進入坐標為(i,j)的格子,我們接著再判斷它能否進入四個相鄰的格子(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函數用來判斷機器人能否進入坐標為(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));

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/107503.html

相關文章

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

    摘要:什么是回溯算法回溯法是一種系統搜索問題解空間的方法。解空間定義為與數字長度相同。最后,為什么要掌握回溯法因為懂了回溯法之后筆試里的很多題就算不了,起碼成功運行到之間是沒問題的。 什么是回溯算法?回溯法是一種系統搜索問題解空間的方法。為了實現回溯,需要給問題定義一個解空間。說到底它是一種搜索算法。只是這里的搜索是在一個叫做解空間的地方搜索。而往往所謂的dfs,bfs都是在圖或者樹這種數據...

    saucxs 評論0 收藏0
  • 回溯

    摘要:回溯算法主要思想回溯算法的基本思想是從一條路往前走,能進則進,不能進則退回來,換一條路再試。回溯算法說白了就是窮舉法。回溯算法也叫試探法,它是一種系統地搜索問題的解的方法。用回溯算法解決問題的一般步驟為定義一個解空間,它包含問題的解。 回溯算法 主要思想 回溯算法的基本思想是:從一條路往前走,能進則進,不能進則退回來,換一條路再試。八皇后問題就是回溯算法的典型,第一步按照順序放一個皇...

    ctriptech 評論0 收藏0
  • 思想

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

    sshe 評論0 收藏0
  • 校招社招必備核心前端面試問題詳細解答

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

    DevTalking 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<