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;
}