Description:
题目大意:给出一个二维字符网络和一个单词,判断单词是否存在二维字符网络中
解题思路:
算法标签:DFS
代码:
class Solution {
private:
int rows,cols;
bool dfs(vector<vector<char>>& board,string word,int i,int j,int k) {
// 剪枝
if(i >= rows || i < 0 || j >= cols || j < 0 || board[i][j] != word[k])
return false;
// 访问到最后一个单词,并且相等
if(k == word.size()-1)
return true;
// 标记已经访问过
board[i][j] = '\0';
// 判断四个方向
bool res = dfs(board,word,i+1,j,k+1) || dfs(board,word,i,j+1,k+1) || dfs(board,word,i-1,j,k+1) || dfs(board,word,i,j-1,k+1);
//回溯
board[i][j] = word[k];
return res;
}
public:
bool exist(vector<vector<char>>& board, string word) {
// 行数,列数
rows = board.size();
cols = board[0].size();
for(int i = 0;i < rows;i++)
for(int j = 0;j < cols;j++) {
// 从每个节点dfs
if(dfs(board,word,i,j,0))
return true;
}
return false;
}
};