这道题需要状态重置,采用BFS时,重置状态很难处理。所以用了DFS
bool dfs(int r, int c, int len, vector<vector<char>> &board, string word)
{
if (r >= board.size() || c >= board[0].size() || r < 0 || c < 0 || len >= word.size() || word[len] != board[r][c])
return false;
if (len == word.size() - 1 && word[len ] == board[r][c])
return true;
char tmp = board[r][c];
board[r][c] = '*';
bool flag = dfs(r+1, c, len + 1, board, word) || dfs(r - 1, c, len + 1, board, word)|| dfs(r , c-1, len + 1, board, word)||dfs(r, c + 1, len + 1, board, word);
board[r][c] = tmp;
return flag;
}
bool exist(vector<vector<char>>& board, string word)
{
for (int i = 0; i < board.size(); i++)
{
for (int j = 0; j < board[0].size(); j++)
{
if (board[i][j] == word[0])
{
if (dfs(i, j, 0, board, word))
return true;
}
}
}
return false;
}