题面
题解
DFS搜索简单题,我们以二维矩阵的每一个点为起点,然后开始dfs,只要有一种情况满足就可以返回true
代码
class Solution {
public:
bool dfs(vector<vector<char>> &matrix, string &str, int len, int x, int y) {
if (matrix[x][y] != str[len]) return false;
if (len == str.size() - 1) return true;
char t = str[len];
matrix[x][y] = '*'; //标记一个从未出现过的字符
int dx[4] = {
1, -1, 0, 0};
int dy[4] = {
0, 0, 1, -1};
for (int i = 0; i < 4; i++) {
int a = x + dx[i], b = y + dy[i];
if (a >= 0 && a < matrix.size() && b >= 0 && b < matrix[a].size()) {
if (dfs(matrix, str, len + 1, a, b)) {
return true;
}
}
}
matrix[x][y] = t; //还原
return false;
}
bool hasPath(vector<vector<char>> &matrix, string &str) {
for (int i = 0; i < matrix.size(); i++) {
for (int j = 0; j < matrix[i].size(); j++) {
if (dfs(matrix, str, 0, i, j)) {
return true;
}
}
}
return false;
}
};