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