public boolean hasPath (char[][] matrix, String word) {
int rows = matrix.length;
if (rows == 0) return false;
int cols = matrix[0].length;
boolean[][] visited = new boolean[rows][cols];//标识每个方格是否在路径里面,防止路径进入重复的方格里
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (hasPath (matrix,i,j,visited,word,0)) return true;
}
}
return false;
}
public boolean hasPath (char[][] matrix,int row,int col,boolean[][] visited,String word,int loc) {
if (loc == word.length()) return true;
int rows = matrix.length;
int cols = matrix[0].length;
if (row < 0 || row == rows || col < 0 || col == cols) return false;
if (visited[row][col]) return false;
if (matrix[row][col] == word.charAt(loc)){
visited[row][col] = true;
if (hasPath (matrix,row-1,col,visited,word,loc+1) || hasPath (matrix,row+1,col,visited,word,loc+1)
|| hasPath (matrix,row,col-1,visited,word,loc+1) || hasPath (matrix,row,col+1,visited,word,loc+1)){
return true;
}
visited[row][col] = false;
}
return false;
}