剑指 Offer 12. 矩阵中的路径https://leetcode.cn/problems/ju-zhen-zhong-de-lu-jing-lcof/
注意:
该用引用的地方就用引用,这对效率的影响很大
比如:函数传参、for loop里的临时对象
vector<vector<int>> dirs = { {-1,0},{1,0},{0,-1},{0,1} };
vector<vector<bool>> used;
bool backTrack(vector<vector<char>>& board, const string& word, int i, int j, int index)
{
// base case
if (index == word.size())
{
return true;
}
int m = board.size(), n = board[0].size();
for (vector<int>& dir : dirs)
{
int x = i + dir[0];
int y = j + dir[1];
if (0 <= x && x < m && 0 <= y && y < n && !used[x][y] && board[x][y] == word[index])
{
used[x][y] = true;
if (backTrack(board, word, x, y, index + 1))
{
return true;
}
used[x][y] = false;
}
}
return false;
}
bool exist(vector<vector<char>>& board, string word) {
int m = board.size(), n = board[0].size();
used.resize(m, vector<bool>(n, false));
for (int i = 0; i < m; ++i)
{
for (int j = 0; j < n; ++j)
{
if (board[i][j] == word[0])
{
used[i][j] = true;
if (backTrack(board, word, i, j, 1))
{
return true;
}
used[i][j] = false;
}
}
}
return false;
}