题目描述:
给定一个二维网格和一个单词,找出该单词是否存在于网格中。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
示例:
board = [ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E'] ] 给定 word = "ABCCED", 返回 true. 给定 word = "SEE", 返回 true. 给定 word = "ABCB", 返回 false.
解题思路:
dfs+回溯
代码:
class Solution {
public:
bool exist(vector<vector<char>>& board, string word) {
vector<vector<int>> boardbool(board.size(), vector<int>(board[0].size(), 0));
for(int i = 0; i < board.size(); ++i){
for(int j = 0; j < board[0].size(); ++j){
if(dfs(board, boardbool, word, 0, i, j) == true)
return true;
}
}
return false;
}
bool dfs(vector<vector<char>>& board, vector<vector<int>>& boardbool, string w, int index, int i, int j){
if(index == w.size())
return true;
if(i < 0 || i >= board.size() || j < 0 || j >= board[0].size() || board[i][j] != w[index])
return false;
if(boardbool[i][j] == 0){
boardbool[i][j] = 1;
if(dfs(board, boardbool, w, index + 1, i + 1, j)) return true;
if(dfs(board, boardbool, w, index + 1, i, j + 1)) return true;
if(dfs(board, boardbool, w, index + 1, i - 1, j)) return true;
if(dfs(board, boardbool, w, index + 1, i, j - 1)) return true;
boardbool[i][j] = 0;
}
return false;
}
};