zoukankan      html  css  js  c++  java
  • 剑指 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;
        }
    }

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

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

  • 相关阅读:
    vim中自动添加文件的作者、时间信息、版本等
    linux shell ipaddress
    java ant学习
    ganglia rpm安装
    深入分析 Java 中的中文编码问题
    javaIO调优
    超强的vim设置
    linux中core文件的生成和配置
    C和C++ 语言动态内存分配
    Linux的常用命令
  • 原文地址:https://www.cnblogs.com/take-it-easy/p/14911663.html
Copyright © 2011-2022 走看看