题目:单词搜索
使用到了深搜
具体实现:
首先在双层循环中判断首元素是什么,之后以这个元素为起点进行深搜
dfs函数核心的判断逻辑是“found”变量那里——只有出现一条连续的、与word匹配的元素串,found才能为真
要注意的是,因为同一元素不能重复使用,所以在进行深搜的时候要提前将当前元素标记为“已使用”,这里采用的是‘\0’(不属于任何字母)
1bool dfs(vector<vector<char>>& board, string word, int index, int r, int c)
2{
3 if(index == word.size()) return true;
4 if(r < 0 || r >= board.size() || c < 0 || c >= board[0].size() || word[index] != board[r][c]) return false;
5
6 char temp = board[r][c];
7 board[r][c] = '\0';
8
9 bool found = dfs(board, word, index + 1, r + 1, c ) ||
10 dfs(board, word, index + 1, r, c + 1) ||
11 dfs(board, word, index + 1, r - 1, c ) ||
12 dfs(board, word, index + 1, r, c - 1);
13
14 board[r][c] = temp;
15
16 return found;
17}
18bool exist(vector<vector<char>>& board, string word)
19{
20 for(int j = 0; j < board[0].size(); j++)
21 {
22 for(int i = 0; i < board.size(); i++)
23 {
24 if(dfs(board, word, 0, i, j)) return true;
25 }
26 }
27 return false;
28}