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;
        }
    }

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

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

  • 相关阅读:
    老外写的js闭包
    List<Object> 转为 List<MyClass>
    html 自定义属性
    js 中的算术运算
    System.Web.Mvc.Html 命名空间小计
    历时半年,发布最完整的代码生成器CodeBuilder最新版本
    CodeBuilder之Template接口
    CodeBuilder之Tool接口
    FaibClass.Data
    轻量的Json序列化
  • 原文地址:https://www.cnblogs.com/take-it-easy/p/14911663.html
Copyright © 2011-2022 走看看