剑指 Offer 12. 矩阵中的路径

 

 

 

 

看到之后觉得

要么是回溯法,要么是深度优先搜索+剪枝

写的回溯法,但是好像没太搞出来

 

一个是怎么记录这种二维坐标,傻了,一开始还记录的是 int[][]的数组,其实直接记录i j两个参数就行

二是怎么查重,一开始想着用hashset,但是二维的感觉不太好弄,其实可以把已经访问过的地方置空格,访问完后再置回正常值

总体代码如下:

class Solution {
    public boolean exist(char[][] board, String word) {
        char[] wordChar=word.toCharArray();
        for(int i=0;i<board.length;i++)
        {
            for(int j=0;j<board[0].length;j++)
            {
                if(dfs(board,wordChar,i,j,0))
                {return true;}
            }
        }
        return false;

    }
    public boolean dfs(char[][] board,char[] word,int i,int j,int index)
    {
        if(index==word.length)
        {return true;}//到底了
        if(i<0||j<0||i>board.length-1||j>board[0].length-1||board[i][j]!=word[index])
        {return false;}//超过界限或者不相等
        char flag=board[i][j];
        board[i][j]=' ';
        if(dfs(board,word,i+1,j,index+1)||dfs(board,word,i,j+1,index+1)||dfs(board,word,i-1,j,index+1)||dfs(board,word,i,j-1,index+1))
        {return true;}
        board[i][j]=flag;
        return false;
    }
}

 

感觉这种深度优先搜索+剪枝的题目还挺多的,有必要练一练

然后这种和回溯法的区别在于什么呢

posted @ 2021-06-21 10:33  将来的事  阅读(17)  评论(0编辑  收藏  举报