题目:单词搜索

使用到了深搜

具体实现:

首先在双层循环中判断首元素是什么,之后以这个元素为起点进行深搜

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}