在矩阵中查找路径:DFS算法

计算机视觉-深度学习图像检测方法梳理 计算机视觉-深度学习图像检测方法梳理 由于之后要转方向啦,趁这段时间整理手中硕士研究方向的一些阅读笔记,这是一篇关于计算机视觉的基础知识梳理 先搞清一些小知识点 首先我们要弄清楚图像分类、目标定位、语义分割、实例分割的区别 a. 图像分类 :给定一张输入图像,图像分类任务旨在判断该图像所属类别; b. 目标定位 :在图像分类的基础上,我们还想知道图像中的目标具体在图像的什么位置,通常是以包围盒的(bounding box)形式; c. 语义分割 :语义分割是目标检测更进阶的任务,目标检测只需要框出每个目 阅读详情

本问题是典型的矩阵搜索问题,可使用 深度优先搜索(DFS)+ 剪枝 解决

题目:

请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用加粗标出)。

[["a","b","c","e"],
["s","f","c","s"],
["a","d","e","e"]]

但矩阵中不包含字符串“abfb”的路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入这个格子。

思路:

1. 算法介绍:

对于该题目而言,DFS算法就是走遍矩阵,走通了就说明找到该路径,走遍了所有路线还是找不到了就说明找不到。(此处只讲我对该算法的理解,完整定义理解请看https://blog.youkuaiyun.com/li_jeremy/article/details/83714298)

关键点:

1)定义走通的条件:目的字符串遍历完成。

2)定义走不通的条件:坐标超出范围或字符和该坐标相应字符不符合或矩阵该位置字符已经找过了。

PS:矩阵该位置字符已经找过了,所以不用再重复找了,不然的话会出现某些矩阵字符被重复使用。这是和题目要求相悖的。

2. 递归函数相关设置

1)参数设置:矩阵的索引x,y;矩阵;目的字符串;目的字符串的下标

2)return true情况:目的字符串的下标 == (目的字符串长度-1)

3)return false情况:坐标超出范围或字符和该坐标相应字符不符合或矩阵该位置字符已经找过了。

4)辅助操作:当走过矩阵某个位置字符时,就记为'\' ,用完就记得恢复,使下次找另外字符串时原始矩阵没有'\'

5)找目的字符串下一个字符,则从上下左右四个方向走矩阵,用或运算连接结果。

代码实现:

递归函数:

bool dfs(int x, int y, int nIndex, string word, vector<vector> & board)
{
    if(board.size()<=0 || x < 0 || y < 0 || x >= board.size() || y >= board[0].size()
        || word[nIndex] != board[x][y])
        return false;

    if(nIndex == word.length()-1)
        return true;

    char tmp = board[x][y];
    // 标记矩阵走过的字符
    board[x][y] = '\\';
    bool ret = dfs(x+1, y, nIndex+1, word, board) 
                || dfs(x-1, y, nIndex+1, word, board)
                || dfs(x, y+1, nIndex+1, word, board)    
                || dfs(x, y-1, nIndex+1, word, board);

    // 恢复标记
    board[x][y] = tmp;
    return ret;
}
bool exist(string word, vector<vector>  &board)
{
    for(int i = 0; i<board.size(); i++)
    {
        for(int j = 0; j<board[i].size(); j++)
        {
            if(dfs(i, j, 0, word, board))
                return ture;
         }
    }
    
    return false;
 }

 

Allegro如何画Photoplot_Outline操作指导 在用Allegro进行PCB设计的时候,最后进行光绘输出前,Photoplot_Outline是必备一个图形,所有在Photoplot_Outline中的图形将被输出,Photoplot_Outline以外的图形都将不被输出。如何绘制Photoplot_Outline,具体操作如下。如何画Photoplot_Outline操作指导。 阅读详情

相关推荐

在AutoDL的A100云服务器上,用Docker搞定Sapien+RobotWin环境(附完整conda list)

本文详细介绍了在AutoDL的A100云服务器上使用Docker构建Sapien+RobotWin环境的完整指南。通过配置Vulkan渲染管线、精确复现Conda环境以及解决常见问题,帮助研究人员高效搭建稳定的机器人仿真开发环境,特别适合需要高性能GPU加速的复杂仿真任务。

weixin_30689307的博客 433

【JZ-12】矩阵中的路径(深度优先搜索)

题目

子木_98的博客 405

高通410随身WiFi刷OpenWRT与Debian双系统一键集成方案

本文详细介绍高通410随身WiFi设备刷入OpenWRT与Debian双系统的一键集成方案。通过虎王工作室提供的一键刷机包,用户可轻松实现双系统部署,兼顾OpenWRT的网络功能与Debian的完整应用服务,适用于网络加速、服务器部署等多种场景,并提供了硬件资源分配与系统切换的实用指南。

docker7nomad的博客 1138

算法:矩阵中的路径

学习算法,不仅能让自己思维能力更是一个台阶,也能在大数据和人工智能时代为自己打下坚实的基础,成为互联网行业的高端人才,而不是一直停留在低水平的体力编程层次。

孤芳不自赏 375

WGCNA分析中那些没人告诉你的坑:以肺结核差异基因模块筛选为例

本文深入探讨WGCNA分析在肺结核差异基因模块筛选中的七个关键陷阱,包括soft-thresholding选取、样本离群值检测、模块合并阈值调整等。通过实际案例和R代码示例,揭示生信数据挖掘中常被忽视的技术细节,帮助研究者避免常见错误,提升分析结果的可靠性和生物学意义。

weixin_29218509的博客 261

手把手教你搞定Pattern Recognition Letters的LaTeX投稿(附elsarticle.cls生成避坑指南)

本文详细指导如何在Pattern Recognition Letters(PRL)期刊上使用LaTeX进行投稿,特别针对elsarticle.cls文件的生成与常见问题提供避坑指南。从模板准备、文件上传到投稿后的验证,系统梳理全流程技术要点,帮助研究者高效完成学术论文投稿。

weixin_33824385的博客 430

【算法题】矩阵中的路径

题目描述 分析 利用回溯法,从矩阵任一点开始,向四周试探,若满足字符顺序,则走一步并继续试探,直到字符串搜索结束返回true。如果都不满足,则回溯继续搜索。由于不能重复走同一个格子,需要一个额外的布尔数组记录走过的路径,同时,在回溯时要将走过的当前格子标记清除。 代码(已AC) public class Solution { public boolean hasPath(char[] m...

Steven_L_的博客 3050

YOLOv8 改进有效涨点专栏目录 | 含卷积、主干、注意力机制、Neck、检测头、损失函数、二次创新C2PSA/C3k2等各种网络结构改进

YOLOv8在目标检测领域的地位与优势模型改进的意义与价值本专栏的特色与创新点读者学习路径建议关键改进点回顾不同场景的模型选型建议开源社区资源汇总持续学习路径指南YOLOv8在目标检测领域的地位与优势模型改进的意义与价值本专栏的特色与创新点读者学习路径建议关键改进点回顾不同场景的模型选型建议开源社区资源汇总持续学习路径指南。

weixin_39818775的博客 1073

寻路算法实现

实现任意两点间的寻路,自动选择最优或较优路径 1.基本要求 可以以矩阵表示地图, {1,1,1,1,1,1,1,1,1,1,1 } {1,0,1,0,1,0,0,0,0,0,1 } {1,0,1,0,0,0,1,0,1,1,1 } {1,0,0,0,1,0,1,0,0,0,1 } {1,0,1,1,0,0,1,0,0,1,1 }           0代表可以通过,1代表不可通过

andyhuabing的专栏 2244

自然语言处理:长文本场景下的关键词抽取实践

自然语言处理:长文本场景下的关键词抽取实践

丨汀、的博客 2077

rk3588主板PDM接口接数字MIC录音

本文介绍了Rockchip 3588平台上6麦克风PDM接口的硬件连接与软件调试过程。硬件方面展示了PDM0_CLK0_M0时钟脚和三组数据脚的连接方案。软件配置包括设备树修改,生成声卡节点,并提供了6通道录音命令示例。文章重点分析了两个常见问题:录音无声(需检查供电、接线和波形)和通道数据缺失(需正确配置rockchip,path-map寄存器映射)。最后通过Audition工具验证录音文件,确认各通道工作正常。调试过程完整展现了从硬件连接到软件配置的完整流程。

m0_60805802的博客 1015

寻路问题--如何找到一条从起点坐标到终点坐标的路径?

一,寻路问题介绍 正如组合问题与动态规划的联系之应用提到的从起点(0,0)到终点(X,Y)一共有多少种走法。与之相似的另一个问题是如何找到从(0,0)到(X,Y)的路径? 首先对问题建模。使用一个矩阵(二维数组)的下标 表示 各个点的坐标。矩阵元素只取 0 或者 1,0 表示此坐标是一个可达的正常顶点;而 1 则表示这是一个不可达的障碍顶点。比如 如下矩阵: {0,0,1,1,0}{1,0,...

weixin_30885111的博客 1130

Newton & Nvidia 开源 GPU 加速机器人仿真器入门教程(一)

Newton 是一个 GPU 加速、可扩展和可微分的物理仿真引擎,专为机器人、研究和高级仿真工作流而设计。Newton 基于 NVIDIA Warp 并集成了 MuJoCo Warp,为用户和开发人员提供了高性能仿真、现代 Python API 和灵活的架构。

机器人控制与仿真应用 1482

数据结构:图

详细介绍图

愿你我都能实现自己的梦想 1501

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

golang实现剑指offer:深度优先遍历(DFS)题型

深度优先遍历(DFS)题型 前言 递归是一种算法结构(在函数中调用函数本身来解决问题),回溯是一种算法思想 回溯就是通过不同的尝试来生成问题的解,有点类似于穷举,但是和穷举不同的是回溯会**“剪枝”**,就是对已经知道错误的结果没必要再搜索下去了。 比如一个有序数列1,2,3,4,5,我要找和为5的所有集合,从前往后搜索我选了1,然后2,然后选3 的时候发现和已经大于预期,那么4,5肯定也不...

luckylemontree的博客 2420

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

DFS(图的表示与深度历遍搜索)

DFS基础 图的表示方法(2种) 一般我们用邻接矩阵和邻接表来表示图的关系 邻接矩阵 用一个二维数组G存放图,G[i][j]表示节点i和节点j之间边的情况(如有无边,边方向,权值大小等) 。 遍历复杂度:O(n2) n为节点数目 G[n][n] 1 2 3 4 5 6 7 8 9 10 1 0 1 1 0 0 0 0 0 0 0 2 1 0 0 1 0 0 0 0 0 ...

One of thre_tigers的博客 1600

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

2021.04.06矩阵中的路径

2021.04.06矩阵中的路径 题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用加粗标出)。 [[“a”,“b”,“c”,“e”], [“s”,“f”,“c”,“s”], [“a”,“d”,“e”,“e”]] 但矩阵中不包含字符串“abfb”的路径,因为字符

Zack_zc_zc的博客 243

剑指 Offer 11. 旋转数组的最小数字、12.矩阵中的路径

二分查找、回溯法

记录我目之所及的世界 126

【LeetCode】剑指 Offer 12. 矩阵中的路径

【LeetCode】剑指 Offer 12. 矩阵中的路径

2022年毕业的萌新程序猿,输出一下自己的学习内容~ 293

深度优先搜索(解题剑指Offer12、13)

剑指Offer12-矩阵中的路径 题目描述 思路分析 显然这是一个深度优先搜索的题,遍历整个矩阵寻找word的首字母,然后对首字母位置的上下左右四个方向进行延展,判断第二个字母是否存在,依此方法直到找到整个word字符串,即为true。为了避免重复遍历某个位置,在一条分支走过该位置时将其置为数字等不影响的字符作为标记,由于不同分支互不影响,所以在该分支结束时需要将标记恢复。 代码 bool exist(vector<vector<char>>& board, string

暗色光的博客 150

BFS\DFS\回溯搜索算法模版

搜索算法模版BFS、DFS、回溯

tz986548749的博客 172

图的遍历:深度优先搜索与广度优先搜索

1、定义深度优先搜索(DFS):从图中某个初始顶点v出发,首先访问初始顶点v,然后选择一个与顶点v相邻且没被访问过的顶点w为初始顶点,再从w出发进行深度优先遍历,直到图中与当前顶点v邻接的所有顶点都被访问过为止。广度优先搜索(BFS):首先访问初始顶点v,接着访问顶点v的所有未被访问过的邻接点v1,v2,...,vt,然后再按照v1,v2,...,vt的次序,访问每一个顶点的所有未被访问过的邻接点...

每一次的失败都是踏上最终成功的垫脚石~ 1076

深度优先算法和二分法剩余部分

剑指Offer-深度优先算法部分矩阵中的路径解题思路 矩阵中的路径 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。 例如,在下面的 3×4 的矩阵中包含单词 “ABCCED”(单词中的字母已标出)。 示例 1: 输入:board = [["A","B","C"

JIMJJU的博客 234

剑指Offer系列12—矩阵中的路径

题意 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用加粗标出)。 [[“a”,“b”,“c”,“e”], [“s”,“f”,“c”,“s”], [“a”,“d”,“e”,“e”]] 但矩阵中不包含字符串“abfb”的路径,因为字符串的第一个字符b占据了矩阵中的第一行第

fkuner的博客 212

day2-替换空格、重建二叉树、矩阵路径

面试题05. 替换空格 难度简单20 请实现一个函数,把字符串 s 中的每个空格替换成"%20"。 示例 1: 输入:s = "We are happy." 输出:"We%20are%20happy." 限制: 0 <= s 的长度 <= 10000 char* replaceSpace(char* s){ char *p=(char*)malloc(3*(strlen(s)+1)*sizeof(char)); char *ts=s,*tp=p; while(*ts!

Amethyst的博客 500

LeetCode 剑指 Offer——旋转数组的最小数字、矩阵中的路径

旋转数组中的最小数字 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。 示例1: 输入:[3,4,5,1,2] 输出:1 示例2: 输入:[2,2,2,0,1] 输出:0 代码: def minArray(self, numbers: List[int]) -> int: i, j = 0, len(numbers)-1

无风而起的博客 175
上一篇: 设计模式概要
下一篇: 关于createMutex的神奇bug
Quellaaa
博客等级 码龄9年 24粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值