题目
代码
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;
}
};
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » 矩阵中的路径(dfs)-acwing
发表评论 取消回复