题目描述

思路:回溯法
视频讲解链接:https://www.bilibili.com/video/BV1XE411J7KD?from=search&seid=13022026484718061702
public boolean hasPath(char[] matrix, int rows, int cols, char[] str){char[][] board = new char[rows][cols];int x = 0;int index = 0;for(int i=0;i<matrix.length;i++) {if(index>=cols) {index = 0;x++;}board[x][index] = matrix[i];index++;}StringBuilder word = new StringBuilder();for(int i=0;i<str.length;i++) {word.append(str[i]);}return exist(board,word.toString());}public boolean exist(char[][] board,String word) {boolean[][] vis = new boolean[board.length][board[0].length];for(int i=0;i<board.length;i++) {for(int j=0;j<board[0].length;j++) {if(solve(board,word,i,j,vis,0)) {return true;}}}return false;}private boolean solve(char[][] board, String word, int x, int y, boolean[][] vis,int index) {if(x<0||x>=board.length||y<0||y>=board[0].length||vis[x][y])return false;if(word.charAt(index)!=board[x][y])return false;if(index==word.length()-1)return true;vis[x][y] = true;boolean flag = solve(board, word, x+1, y, vis,index+1)||solve(board, word, x-1, y, vis,index+1)||solve(board, word, x, y+1, vis,index+1)||solve(board, word, x, y-1, vis,index+1);vis[x][y] = false;return flag;}
