class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param matrix char字符型vector<vector<>>
* @param word string字符串
* @return bool布尔型
*/
int m, n, l;
bool isFind = false;
vector<vector<bool>> isVisit;
void backtrace(vector<vector<char>>& matrix, string& word, int i, int j, int w) {
if (isFind) {
return;
} else if (w == l - 1) {
isFind = true;
} else {
isVisit[i][j] = true;
if (i + 1 < m && !isVisit[i + 1][j] && matrix[i + 1][j] == word[w + 1]) {
backtrace(matrix, word, i + 1, j, w + 1);
}
if (i - 1 >= 0 && !isVisit[i - 1][j] && matrix[i - 1][j] == word[w + 1]) {
backtrace(matrix, word, i - 1, j, w + 1);
}
if (j + 1 < n && !isVisit[i][j + 1] && matrix[i][j + 1] == word[w + 1]) {
backtrace(matrix, word, i, j + 1, w + 1);
}
if (j - 1 >= 0 && !isVisit[i][j - 1] && matrix[i][j - 1] == word[w + 1]) {
backtrace(matrix, word, i, j - 1, w + 1);
}
isVisit[i][j] = false;
}
}
bool hasPath(vector<vector<char> >& matrix, string word) {
m = matrix.size();
n = matrix[0].size();
l = word.size();
isVisit = vector<vector<bool>>(m, vector<bool>(n, false));
isFind = false;
for (int i = 0; i < m; i++) {
if (isFind) {
break;
}
for (int j = 0; j < n; j++) {
if (isFind) {
break;
}
if (matrix[i][j] == word[0]) {
backtrace(matrix, word, i, j, 0);
}
}
}
return isFind;
}
};