作者:好人好报 | 来源:互联网 | 2023-10-13 13:48
【剑指offor】面试题12:矩阵中的路径
题目描述
给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
例如,在下面的 3×4 的矩阵中包含单词 “ABCCED”(单词中的字母已标出)。
代码
class Solution {
public:bool hasPath(vector<vector<char> >& board, string word) {for(int i &#61; 0; i < board.size(); i&#43;&#43;)for(int j &#61; 0; j < board[i].size(); j&#43;&#43;)if(dfs(board,word,0,i,j)) return true;return false; }int dx[4] &#61; {-1,0,1,0}, dy[4] &#61; {0,1,0,-1}; bool dfs(vector<vector<char>>& board, string& word,int u,int x,int y){if(board[x][y] !&#61; word[u]) return false;if(u &#61;&#61; word.size() - 1) return true;char t &#61; board[x][y];board[x][y] &#61; &#39;.&#39;;for(int i &#61; 0; i < 4; i&#43;&#43;){int a &#61; x &#43; dx[i], b &#61; y &#43; dy[i];if(a < 0 || a >&#61; board.size() || b < 0 || b >&#61; board[0].size() || board[a][b] &#61;&#61; &#39;.&#39;) continue;if(dfs(board,word,u&#43;1,a,b)) return true;}board[x][y] &#61; t;return false;}
};