Toasobi
矩阵中的路径(中等)
本文最后更新于2023年03月03日,已超过677天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!
一般遇到矩阵中求路径的题,首先想到的是dfs递归回溯算法,具体的图解如下
注意两个for循环一直在检测是否匹配,若匹配则开始递归,不匹配则进入下一个循环。同时注意我们传递的参数的重要性,包括检测坐标是否超出界限(超出则立即返回false剪枝),并且每次访问一个节点都要修改其值表示已经访问
下面则是代码
<div>
class Solution {
public boolean exist(char[][] board, String word) {
char[] words = word.toCharArray();
int row = board.length;
int col = board[0].length;
for(int i = 0;i < row; i++){
for(int j = 0;j < col; j++){
if(dfs(board,words,i,j,0)){
return true;
}
}
}
return false;
}
public boolean dfs(char[][] board,char[] words, int i,int j,int k){
//终止条件
if(i > board.length-1 || i < 0 || j < 0 || j > board[0].length -1 || words[k] != board[i][j] )
return false;
if(k == words.length-1)
return true;
//找到点了且不是终点,需要开始递归dfs
board[i][j] = '\0';
boolean flag = dfs(board,words,i+1,j,k+1) || dfs(board,words,i-1,j,k+1) || dfs(board,words,i,j+1,k+1) ||
dfs(board,words,i,j-1,k+1);
board[i][j] = words[k];
if(flag)
return true;
return false;
}
}
</div>