/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param matrix char字符型二维数组
* @param matrixRowLen int matrix数组行数
* @param matrixColLen int* matrix数组列数
* @param word string字符串
* @return bool布尔型
*/
static int row, col, len, k;
void dfs(char** matrix, char* word, int i, int j) {
char temp = matrix[i][j];
matrix[i][j] = '.';
k++;
if (k == len) {
return;
}
if (i - 1 >= 0 && matrix[i - 1][j] == word[k] && k < len) {
dfs(matrix, word, i - 1, j);
}
if (j - 1 >= 0 && matrix[i][j - 1] == word[k] && k < len) {
dfs(matrix, word, i, j - 1);
}
if (i + 1 < row && matrix[i + 1][j] == word[k] && k < len) {
dfs(matrix, word, i + 1, j);
}
if (j + 1 < col && matrix[i][j + 1] == word[k] && k < len) {
dfs(matrix, word, i, j + 1);
}
if (k == len) {
return;
}
k--;
matrix[i][j] = temp;
}
bool hasPath(char** matrix, int matrixRowLen, int* matrixColLen, char* word ) {
// write code here
if(word==NULL){
return true;
}
if(matrixRowLen==0||*matrixColLen==0){
return false;
}
row = matrixRowLen;
col = *matrixColLen;
len = strlen(word);
int i, j;
k = 0;
for (i = 0; i < row; i++) {
for (j = 0; j < col; j++) {
if (matrix[i][j] == word[k]) {
dfs(matrix, word, i, j);
if (k == len)return true;
}
}
}
return false;
}