题目描述
思路:回溯法
视频讲解链接: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;
}