博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指offer12.矩阵中的路径—DFS+剪枝
阅读量:4072 次
发布时间:2019-05-25

本文共 1449 字,大约阅读时间需要 4 分钟。

剑指offer12.矩阵中的路径

题目

给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。

单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
在这里插入图片描述

  • 示例
输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED"输出:true输入:board = [["a","b"],["c","d"]], word = "abcd"输出:false

思路和代码

  • 思路
    这是一个典型的矩阵搜索的问题,可以用深度优先搜索(DFS递归)+剪枝。
    首先的话每个点都可能是起始点,所以要用一个双层循环来遍历,循环的代码则是对遍历到的点进行深度优先遍历;
    其次在遍历的时候要进行剪枝,先判断不成立的条件:行的左越界、列的左右越界、已经走过被标记的。成立的条件是:遍历的字符的长度为word.length-1(因为K是从0开始的);中间某个成立后先标记已经遍历过了,再开始上下左右开始进行递归判断,回溯的时候要将标记的字符变为原来的样子,以便进行下一次循环。
  • 代码
class Solution {    public boolean exist(char[][] board, String word) {        //DFS+剪枝        char[] words=word.toCharArray();        int n=board.length;        int m=board[0].length;        for (int i = 0; i < n; i++) {            for (int j = 0; j < m; j++) {                if(dfs(board,words,i,j,0))                    return true;            }        }        return false;    }    private static boolean dfs(char[][] board, char[] word, int i, int j, int k) {        if(i>=board.length||i<0||j>=board[0].length||j<0||board[i][j]!=word[k])            return false;        if(k==word.length-1)            return true;        //如果匹配的话        board[i][j]='\0';        boolean res=dfs(board,word,i+1,j,k+1)||dfs(board,word,i,j+1,k+1)                ||dfs(board,word,i-1,j,k+1)||dfs(board,word,i,j-1,k+1);        //开始回溯的时候恢复原样        board[i][j]=word[k];        return res;    }}

转载地址:http://ntgji.baihongyu.com/

你可能感兴趣的文章
Mac环境下svn的使用
查看>>
github简单使用教程
查看>>
如何高效利用GitHub
查看>>
环境分支-git版本管理
查看>>
uni-app 全局变量
查看>>
js判断空对象的几种方法
查看>>
java 不用递归写tree
查看>>
springboot2 集成Hibernate JPA 用 声明式事物
查看>>
fhs-framework jetcache 缓存维护之自动清除缓存
查看>>
SpringBoot 动态编译 JAVA class 解决 jar in jar 的依赖问题
查看>>
fhs-framework springboot mybatis 解决表关联查询问题的关键方案-翻译服务
查看>>
ZUUL2 使用场景
查看>>
Spring AOP + Redis + 注解实现redis 分布式锁
查看>>
elastic-job 和springboot 集成干货
查看>>
php开发微服务注册到eureka中(使用sidecar)
查看>>
mybatis mybatis plus mybatis jpa hibernate spring data jpa比较
查看>>
支付宝生活号服务号 用户信息获取 oauth2 登录对接 springboot java
查看>>
CodeForces #196(Div. 2) 337D Book of Evil (树形dp)
查看>>
uva 12260 - Free Goodies (dp,贪心 | 好题)
查看>>
uva-1427 Parade (单调队列优化dp)
查看>>