原题链接:https://leetcode-cn.com/problems/ju-zhen-zhong-de-lu-jing-lcof/
dfs
bool exist(vector<vector<char>>& board, string word) {
int n = word.size();
int row = board.size();
int col = board[0].size();
vector<vector<int>> used(row, vector<int>(col, 0));//used记录回溯,走过的节点
for(int i = 0; i < row; i++) {
for(int j = 0; j < col; j++){
if(dfs(board, word, 0, i, j, used)) return true;//dfs
}
}
return false;
}
bool dfs(vector<vector<char>>& board, string word, int pos, int r, int c, vector<vector<int>> &used) {
int row = board.size();
int col = board[0].size();
if (r < 0 || r >= row || c < 0 || c >= col || board[r][c] != word[pos] || used[r][c] == 1) return false;//如果边界超出,或者不满足条件,或者走过该节点
if (pos == word.size() - 1) return true;//如果走到了word最后,则表明成功
used[r][c] = 1;
bool flag = false;
flag = dfs(board, word, pos + 1, r, c - 1, used) || \ //递归上下左右四个方向
dfs(board, word, pos + 1, r, c + 1, used) || \
dfs(board, word, pos + 1, r - 1, c, used) || \
dfs(board, word, pos + 1, r + 1, c, used);
if (flag) {//如果成功则返回
return true;
} else {//如果失败,则将used该点置0,表示不走该节点
used[r][c] = 0;
return false;
}
}