剑指offer 065、矩阵中的路径
题目
题解
看看K神的解析:
class Solution {
public:
bool hasPath(vector<vector<char> >& matrix, string word) {
row = matrix.size();
col = matrix[0].size();
// 每次调用size()函数也是一笔开销
for (int i = 0; i < row; ++i) {
for (int j = 0; j < col; ++j) {
if (dfs(matrix, word, i, j, 0))
return true;
}
}
return false;
}
private:
int row, col;
// k表示string中第k个元素
bool dfs(vector<vector<char>>& matrix, string word, int i, int j, int k) {
// 当发生越界,当前矩阵元素与目标字符不匹配时,返回false
if (i >= row || i < 0 || j >= col || j < 0 || matrix[i][j] != word[k]) return false;
// 当k的值等于len(word) - 1;说明字符串全部匹配了
if (k == word.size() - 1) return true;
// 每次访问过后标记为'\0',避免重复访问
matrix[i][j] = '\0';
// 朝当前元素上下左右四个方向都递归
bool result = dfs(matrix, word, i + 1, j, k + 1) || dfs(matrix, word, i - 1, j, k + 1)
|| dfs(matrix, word, i, j + 1, k + 1) || dfs(matrix, word, i, j - 1, k + 1);
// 将标记的元素修改为初始值
matrix[i][j] = word[k];
return result;
}
};