// 更新行列号
for (auto & d : directions) {
int r = i + d[0];
int c = j + d[1];
// 行列号不能越界
if (r >= 0 && r < board.size() && c >= 0 && c < board[0].size()) {
// 当前格子没有被使用
if (!visited[r][c]) {
bool flag = dfs(board, word, visited, r, c, k +1);
if (flag) {
result = true;
break;
}
}
}
}
private:
int directions[4][2] = {
// right
{0, 1},
// left
{0, -1},
// down
{1, 0},
// up
{-1, 0}
};
完整代码:
class Solution {
public:
bool exist(vector<vector<char>>& board, string word) {
int row = board.size();
if (0 == row) {
return false;
}
int column = board[0].size();
if (0 == column) {
return false;
}
std::vector<std::vector<int>> visited(row, std::vector<int>(column));
for (int i = 0; i < row; ++i) {
for (int j = 0; j < column; ++j) {
bool flag = dfs(board, word, visited, i, j, 0);
if (flag) {
return true;
}
}
}
return false;
}
private:
bool dfs(std::vector<std::vector<char>>& board, std::string word,
std::vector<std::vector<int>>& visited, int i, int j, int k) {
if (board[i][j] != word[k]) {
return false;
} else if (k == word.size() - 1) {
return true;
}
visited[i][j] = true;
bool result = false;
for (auto & d : directions) {
int r = i + d[0];
int c = j + d[1];
if (r >= 0 && r < board.size() && c >= 0 && c < board[0].size()) {
if (!visited[r][c]) {
bool flag = dfs(board, word, visited, r, c, k +1);
if (flag) {
result = true;
break;
}
}
}
}
visited[i][j] = false;
return result;
}
private:
int directions[4][2] = {
// right
{0, 1},
// left
{0, -1},
// down
{1, 0},
// up
{-1, 0}
};
};