模板:
vector<int> path;
vector<vector<int>> result;
void backTracking(......) {
if (......) {
......
return;
}
for (int i = 0; i < size; ++i) {
path.emplace_back(......);
backTracking(......);
path.pop_back();
}
}
int nextP[4][2] = {{0,1},{1,0},{0,-1},{-1,0}};
class Solution {
public:
bool flag = false;
void dfs(vector<vector<char>>& board, string& word, vector<vector<bool>>& book,
int row, int col, int curX, int curY, int wordindex)
{
if(wordindex == word.size())
{
flag = true;
}
for(int i = 0; i < 4; i++)
{
int newX = curX + nextP[i][0];
int newY = curY + nextP[i][1];
if(newX<0||newX>=row
|| newY<0||newY>=col)
continue;
if(book[newX][newY]==false && word[wordindex]==board[newX][newY])
{
book[curX][curY] = true; // 这次的dfs吸取教训只修改了值没有进行还原
dfs(board, word, book, row, col, newX, newY, wordindex+1);
book[curX][curY] = false; // fds回溯时一定要还原状态;
}
}
}
bool exist(vector<vector<char>>& board, string word) {
int row = board.size();
int col = board[0].size();
for(int i = 0; i < row; i++)
{
for(int j = 0; j < col; j++)
{
if(board[i][j] == word[0])
{
vector<vector<bool>> book(row, vector<bool>(col, false));
dfs(board, word, book, row, col, i, j, 1);
if(flag)
return true;
}
}
}
return false;
}
};