class Solution
{
public:
bool dfs(vector<vector<char>>& board, int rowIndex, int colIndex,vector<vector<bool>>& used, string word, int index);
bool exist(vector<vector<char>>& board, string word)
{
if (board.size() == 0)
return false;
vector<vector<bool>> used(board.size(), vector<bool>(board[0].size(), false));
for (int i = 0; i < board.size(); i++)
for (int j = 0; j < board[0].size(); j++)
if (dfs(board, i, j, used, word, 0))
return true;
return false;
}
};
inline bool Solution::dfs(vector<vector<char>>& board, int rowIndex, int colIndex,vector<vector<bool>>& used, string word, int index)
{
if (rowIndex >= board.size() || rowIndex < 0 ||
colIndex >= board[0].size() || colIndex < 0 ||
board[rowIndex][colIndex] != word[index] || used[rowIndex][colIndex])
return false;
if (index == word.size() - 1)
return true;
used[rowIndex][colIndex] = true;
bool res = false;
res = dfs(board, rowIndex+1, colIndex, used, word, index+1) ||
dfs(board, rowIndex-1, colIndex, used, word, index+1) ||
dfs(board, rowIndex, colIndex+1, used, word, index+1) ||
dfs(board, rowIndex, colIndex-1, used, word, index+1);
used[rowIndex][colIndex] = false;
return res;
}
不用used数组
class Solution
{
public:
// bool dfs(vector<vector<char>>& board, int rowIndex, int colIndex,vector<vector<bool>>& used, string& word, int index);
bool dfs(vector<vector<char>> &board, int row, int col, const string &word, int idx);
bool exist(vector<vector<char>>& board, string word)
{
if (board.size() == 0)
return false;
vector<vector<bool>> used(board.size(), vector<bool>(board[0].size(), false));
for (int i = 0; i < board.size(); i++)
for (int j = 0; j < board[0].size(); j++)
// if (dfs(board, i, j, used, word, 0))
if (dfs(board, i, j, word, 0))
return true;
return false;
}
};
// inline bool Solution::dfs(vector<vector<char>>& board, int rowIndex, int colIndex,vector<vector<bool>>& used, string& word, int index)
// {
// if (rowIndex >= board.size() || rowIndex < 0 ||
// colIndex >= board[0].size() || colIndex < 0 ||
// board[rowIndex][colIndex] != word[index] || used[rowIndex][colIndex])
// return false;
// if (index == word.size() - 1)
// return true;
// used[rowIndex][colIndex] = true;
// bool res = false;
// res = dfs(board, rowIndex+1, colIndex, used, word, index+1) ||
// dfs(board, rowIndex-1, colIndex, used, word, index+1) ||
// dfs(board, rowIndex, colIndex+1, used, word, index+1) ||
// dfs(board, rowIndex, colIndex-1, used, word, index+1);
// used[rowIndex][colIndex] = false;
// return res;
// }
inline bool Solution::dfs(vector<vector<char>> &board, int row, int col, const string &word, int idx)
{
if (idx == word.size()) return true;
if (row < 0 || row >= board.size() ||
col < 0 || col >= board[0].size()) return false;
if (word[idx] != board[row][col]) return false;
board[row][col] = '*';
if (dfs(board, row - 1, col, word, idx + 1) ||
dfs(board, row + 1, col, word, idx + 1) ||
dfs(board, row, col - 1, word, idx + 1) ||
dfs(board, row, col + 1, word, idx + 1))
return true;
board[row][col] = word[idx];
return false;
}