进行DFS遍历,每次到一个位置先判断是否能匹配word中的一个,能才踩下去
int[][] dirs = {{0,-1},{0,1},{-1,0},{1,0}};//左,右,上,下 public boolean hasPath (char[][] matrix, String word) { //思路:遍历数组,从随意row,col出发,去过的位置用一个boolean二维数组进行标记 if(matrix==null||matrix.length==0) return false; //每一步都进行判断,相同才尝试去走 int rows = matrix.length; int cols = matrix[0].length; char[] words = word.toCharArray(); boolean[][] isCame = new boolean[rows][cols];//标记一个位置是否走过 for(int row = 0;row<rows;row++){ for(int col = 0;col<cols;col++){ if(canGetWord(matrix,words,0,row,col,isCame,rows,cols)){ return true; } } } return false; } //来到row,col位置,还没踩下去 public boolean canGetWord(char[][] matrix,char[] words, int idx,int row,int col, boolean[][] isCame,int rows,int cols){ if(idx==words.length) return true; if(row<0||row>=rows||col<0||col>=cols||matrix[row][col]!=words[idx]||isCame[row][col]) return false; //尝试往四个方向走 boolean res = false; for(int[] dir:dirs){ isCame[row][col] = true;//踩下去 if(canGetWord(matrix,words,idx+1,row+dir[0],col+dir[1],isCame,rows,cols)){ res = true; } isCame[row][col] = false;//轨迹擦除 } return res; }