日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

剑指offer(65)矩阵中的路径

發布時間:2023/12/13 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 剑指offer(65)矩阵中的路径 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

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

題目分析

分析題意,我們可以知道這道題用回溯法解決最好,因為我們需要一個一個字母的匹配,當發現不行時,就要回溯上個步驟,選擇另一步。

?回溯法是一種選優搜索法,按選優條件向前搜索,以達到目標。但當探索到某一步時,發現原先選擇并不優或達不到目標,就退回一步重新選擇,這種走不通就退回再走的技術為回溯法,而滿足回溯條件的某個狀態的點稱為“回溯點”。

回溯法的基本思想:

?在包含問題的所有解的解空間樹中,按照深度優先搜索的策略,從根結點出發深度探索解空間樹。當探索到某一結點時,要先判斷該結點是否包含問題的解,如果包含,就從該結點出發繼續探索下去,如果該結點不包含問題的解,則逐層向其祖先結點回溯。(其實回溯法就是對隱式圖的深度優先搜索算法)。

?????? 若用回溯法求問題的所有解時,要回溯到根,且根結點的所有可行的子樹都要已被搜索遍才結束。

?????? 而若使用回溯法求任一個解時,只要搜索到問題的一個解就可以結束。

字典樹也有點和回溯法的解空間樹類似。

代碼

function hasPath(matrix, rows, cols, path) {const pathLength = 0;const visited = new Array(rows * cols);for (let row = 0; row < rows; row++) {for (let col = 0; col < cols; col++) {// 遍歷,遍歷的點為起點。if (hasPathCore(matrix, rows, cols, row, col, path, pathLength, visited)) {return true;}}}return false; } function hasPathCore(matrix, rows, cols, row, col, path, pathLength, visited) {let hasPath = false;if (pathLength === path.length) return true;if (row >= 0 &&row < rows &&col >= 0 &&col < cols &&matrix[row * cols + col] === path[pathLength] &&!visited[row * cols + col]) {++pathLength;visited[row * cols + col] = true;// 因為||為短路運算符,只要第一個滿足就會返回,而不會去計算后面的,所以有些路徑可以不用去走。hasPath =hasPathCore(matrix, rows, cols, row - 1, col, path, pathLength, visited) ||hasPathCore(matrix, rows, cols, row, col - 1, path, pathLength, visited) ||hasPathCore(matrix, rows, cols, row + 1, col, path, pathLength, visited) ||hasPathCore(matrix, rows, cols, row, col + 1, path, pathLength, visited);if (!hasPath) {--pathLength;visited[row * cols + col] = false;}}return hasPath; }

?

轉載于:https://www.cnblogs.com/wuguanglin/p/hasPath.html

總結

以上是生活随笔為你收集整理的剑指offer(65)矩阵中的路径的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。