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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

剑指offer之矩阵中的路径

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

題目描述:
請設計一個函數,用來判斷在一個矩陣中是否存在一條包含某字符串所有字符的路徑。路徑可以從矩陣中的任意一格開始,每一步可以在矩陣中向左、右、上、下移動一格。如果一條路徑經過了矩陣的某一格,那么該路徑不能再次進入該格子。例如,在下面的3×4的矩陣中包含一條字符串“bfce”的路徑(路徑中的字母用加粗標出)。

[[“a”,“b”,“c”,“e”],
[“s”,“f”,“c”,“s”],
[“a”,“d”,“e”,“e”]]
但矩陣中不包含字符串“abfb”的路徑,因為字符串的第一個字符b占據了矩陣中的第一行第二個格子之后,路徑不能再次進入這個格子。
示例 1:
輸入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]], word = “ABCCED”
輸出:true
示例 2:
輸入:board = [[“a”,“b”],[“c”,“d”]], word = “abcd”
輸出:false

解題思路:
對于尋找路徑問題,很容易想到廣度或者深度優先搜索,這道題采用深度優先搜索和回溯操作。
大致的思想為:對矩陣中的每一個位置進行深度優先搜索。為了保證對某一個位置搜索時路徑的不重復,需要對訪問過的位置進行標記(程序中將該位置賦值為’/’)。由于不同位置進行深度優先搜索時,會重復訪問某些位置,因此需要回溯操作,即在執行完某一位置的搜索后,將該標記了的位置的值賦值回其原來的值。

class Solution { public:bool exist(vector<vector<char>>& board, string word) {for(int i = 0 ; i < board.size() ; ++i){for(int j = 0 ; j < board[0].size() ; ++j){if(dfs(board,i,j,word,0)) return true;}}return false;}bool dfs(vector<vector<char>>& board,int i, int j, string word ,int k){if(i>=board.size() || i<0 || j>=board[0].size() || j<0 || board[i][j] != word[k]) return false;if(k == word.size() - 1) return true;char temp = board[i][j];board[i][j] = ' ';bool res = dfs(board,i+1,j,word,k+1) || dfs(board,i-1,j,word,k+1) || dfs(board,i,j+1,word,k+1) || dfs(board,i,j-1,word,k+1);board[i][j] = temp;return res;} };

總結

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

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