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