import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param matrix char字符型二维数组
* @param word string字符串
* @return bool布尔型
*/
public boolean hasPath (char[][] matrix, String word) {
char[] arr = word.toCharArray() ;
//标记
boolean[][] isvisit = new boolean[matrix.length][matrix[0].length] ;
//从每一个点出发去找
for(int i = 0 ; i < matrix.length ; i ++) {
for(int j = 0 ; j < matrix[0].length ; j ++) {
//只有起点相同才有找下去的必要
if(matrix[i][j] == word.charAt(0)) {
//找到立即返回
if(dfs(matrix,i,j,arr,0,isvisit)) {
return true ;
}
}
}
}
return false ;
}
/*
从map[i][j]出发 能不能找到 word[index]及其以后的字符序列
*/
public boolean dfs(char[][] map , int i , int j , char[] word , int index,boolean isVisit[][]) {
if(index == word.length) {
return true ;
}
if(i < 0 || i >= map.length || j < 0 || j >= map[0].length) {
return false ;
}
//若已经找过 直接返回false
if(isVisit[i][j]) {
return false ;
}
if(map[i][j] != word[index]) {
return false ;
} else {
//标记
isVisit[i][j] = true ;
//以当前点的四周每个点为起点再去找
boolean flag = dfs(map,i-1,j,word,index+1,isVisit)||
dfs(map,i+1,j,word,index+1,isVisit)||
dfs(map,i,j-1,word,index+1,isVisit)||
dfs(map,i,j+1,word,index+1,isVisit) ;
//解除标记
isVisit[i][j] = false ;
return flag ;
}
}
}