矩阵中的路径(dfs)-acwing
题目
代码
class Solution {
public:
//以每一个坐标作为dfs起点
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;
}
//每一层搜索是否符合,一直搜索到底
//u是递归深度
bool dfs(vector<vector<char>> &matrix, string &str, int u, int x, int y) {
if (matrix[x][y] != str[u]) return false; // 到该层不符合
if (u == str.size() - 1) return true; //成功搜搜底,先判断符不符合
//符合之后继续偏移
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
//回退标记和存储
char t = matrix[x][y];
matrix[x][y] = '*'; // 已搜索
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, u + 1, a, b)) return true; // 符合偏移条件开始搜索
}
}
matrix[x][y] = t;//不符合回退
return false;
}
};
原文地址:https://blog.csdn.net/2401_87338545/article/details/143656046
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!