首页 > 其他分享 >剑指 Offer 12. 矩阵中的路径

剑指 Offer 12. 矩阵中的路径

时间:2023-04-06 22:25:43浏览次数:46  
标签:12 word IsVisit Offer 矩阵 depth board && true

题目链接:剑指 Offer 12. 矩阵中的路径

方法:DFS

解题思路

根据 \(word\) 中的第一个字母,从 \(board\) 网格中开始查找,通过 \(DFS\) 算法思想实现。
注意:

  • 在每一轮开始查找前,每个位置的标记应该清除;
  • 每一个位置有上 下 左 右四个方向可以选择;
  • \(DFS\) 查找进入下一步时要将位置标记上,回溯后,要将该位置标记清除;
  • 其中 \(DFS\) 的终止条件:
    • \(DFS\) 查找的 \(depth\) (深度起始为0) == \(word.size() - 1\);
    • 上下左右四个方向都走不通时。

代码

class Solution {
private:
    bool IsVisit[6][6];
    bool flag;
    int m, n;

public:
    Solution(){
        memset(IsVisit, 0, sizeof(IsVisit));
        flag = false;
    }

    void dfs(int x, int y, int depth, vector<vector<char>>& board, string word){
        if (depth == word.size() - 1) {
            flag = true;
            return ;
        }

        if (x - 1 >= 0 && board[x - 1][y] == word[depth + 1] && !IsVisit[x - 1][y]) {
            IsVisit[x - 1][y] = true;
            dfs(x - 1, y, depth + 1, board, word);
            IsVisit[x - 1][y] = false;
        }
        if (x + 1 < m && board[x + 1][y] == word[depth + 1] && !IsVisit[x + 1][y]) {
            IsVisit[x + 1][y] = true;
            dfs(x + 1, y, depth + 1, board, word);
            IsVisit[x + 1][y] = false;
        }
        if (y - 1 >= 0 && board[x][y - 1] == word[depth + 1] && !IsVisit[x][y - 1]) {
            IsVisit[x][y - 1] = true;
            dfs(x, y - 1, depth + 1, board, word);
            IsVisit[x][y - 1] = false;
        }
        if (y + 1 < n && board[x][y + 1] == word[depth + 1] && !IsVisit[x][y + 1]) {
            IsVisit[x][y + 1] = true;
            dfs(x, y + 1, depth + 1, board, word);
            IsVisit[x][y + 1] = false;
        }

        return ;
    }

    bool exist(vector<vector<char>>& board, string word) {
        m = board.size();
        n = board[0].size();
        char start = word.front();
        int depth = 0;

        for (int i = 0; i < m; i ++ ) {
            for (int j = 0; j < n; j ++ ) {
                if (board[i][j] == start){
                    IsVisit[i][j] = true;
                    dfs(i, j, depth, board, word);
                    if (flag == true) break;
                    memset(IsVisit, 0, sizeof(IsVisit));
                }
            }
            if (flag == true) break;
        }

        return flag;
    }
};

标签:12,word,IsVisit,Offer,矩阵,depth,board,&&,true
From: https://www.cnblogs.com/lxycoding/p/17294432.html

相关文章

  • 129. 颜色交替的最短路径
    题目链接:129.颜色交替的最短路径方法:BFS解题思路当边的权重为\(1\)时,可以使用\(BFS\)计算最短路径;因为起始边有两种情况,所以都需要计算,最后取两者的最小值;代码classSolution{public:vector<int>shortestAlternatingPaths(intn,vector<vector<int>>&redEd......
  • Exp4 恶意代码分析 实验报告—20201229赵斌
    Exp4恶意代码分析实验报告—20201229赵斌一、实验目标1.监控自己系统的运行状态,看有没有可疑的程序在运行。2.分析一个恶意软件,就分析Exp2或Exp3中生成后门软件;分析工具尽量使用原生指令或sysinternals,systracer套件。3.假定将来工作中你觉得自己的主机有问题,就可以用实验......
  • Keil Error L121: Improper Fixup解决
    参考链接:ErrorL121:ImproperFixup(silabs.com)主要问题应该是程序太大,可以尽量缩小程序大小,实在不行的话改为Large即可。从小型2K改为大型64K,不再报错。 ......
  • P8712 [蓝桥杯 2020 省 B1] 整数拼接
    P8712[蓝桥杯2020省B1]整数拼接https://www.luogu.com.cn/problem/P8712这题想多了一步。。不需要求逆元,因为最多9位数,所以直接\(O(10n)\)记录乘积的模值注意不能用map#include<bits/stdc++.h>#definelllonglongusingnamespacestd;constintN=1e5+5;ll......
  • 861. 翻转矩阵后的得分
    题目描述给了一个二维矩阵,矩阵的元素不是0就是1你可以进行任意次操作,让某行或者某列进行翻转元素的得分是每一行二进制的和问怎么操作可以让总得分最大?f1贪心+计算增量基本分析为啥可以贪心?(1)对每行来说,首位肯定是1最好,遮掩某些行需要翻转,某些不翻;(2)对同一列来说,大家的优先......
  • # Java笔记(12) 静态代理
    静态代理可以在不改变原有代码的情况下,增加新的功能和操作,对原有对象进行扩展。静态代理要求真实对象和代理对象都实现同一个接口,由代理对象代理真实角色的接口实现,并在实现前后增加新的操作。publicclassStaticProxy{publicstaticvoidmain(String[]args){Person......
  • 题目 1024: [编程入门]矩阵对角线求和
    求一个3×3矩阵对角线元素之和。 解题思路和注意事项: 这道题还是蛮简单,首先要求求一个矩阵的主副对角线的元素和,那肯定要用到的就是多维数组。        多维数组的形式应该为:array[i][j]; 知道这个后我们开始分析题目:        先是主对角线,就是从左上到......
  • LabVIEW网口TCP通讯西门子PLC,支持200、300、1200、1500、400、SMART全系列
    LabVIEW网口TCP通讯西门子PLC,支持200、300、1200、1500、400、SMART全系列PLCS7协议官方工具包,常用功能一网打尽。1.命令帧读写。程序源码,命令帧文本编写,不调用dll,不安装插件,完胜OPC等。创作不易,非诚勿扰。谢谢大家。YID:6787669089987972......
  • tnsping 报错TNS-12545
     使用tnsping配置好的tnsnams.ora中的别名,出现TNS-12545错误,通过网上查找资料,经过自己的分析结果如下:是由于在配置tnsnams.ora连接的时候host填写的主机名称,解决这种方法有两种:1、把host修改成主机ip。2、配置hosts文件在文件中添加ip对应的主机名称。以上两种方法格有利弊,可......
  • 洛谷P1552 [APIO2012] 派遣 题解 左偏树
    题目链接:https://www.luogu.com.cn/problem/P1552题目大意:每次求子树中薪水和不超过\(M\)的最大节点数。解题思路:使用左偏树维护一个大根堆。首先定义一个Node的结构体:structNode{ints[2],c,sz,dis;longlongsum;Node(){};Node(int_c){s......