TypechoJoeTheme

Toasobi的博客

矩阵中的路径(中等)

本文最后更新于2023年03月03日,已超过566天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

一般遇到矩阵中求路径的题,首先想到的是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>
朗读
赞(0)
评论 (0)