【算法/剑指Offer】请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。

使用递归函数在矩阵中寻找路径 使用回溯法求解迷宫问题,在这个程序中使用的是递归算法 立即下载

题目描述

请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 a b c e s f c s a d e e 这样的3 X 4 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。

/*
 * 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。
 * 路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。
 * 如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子
 * 
 * 思路:回溯法:首先任意一个点都有可能成为起点,所以要获得任意一点的坐标(位于第几行,第几列)
 * 其次要有一个数组记录这个点是否被访问过,同时要有一个指针来记录字符串中字符的位置。
 * 当某个点成为合法的起点时,即这个点与字符串中第一个字符相等,则可以继续朝上下左右搜索下一个点;
 * 如果这个点不能成为合法的起点,则恢复现场(这个点没有被访问过且字符串指针后退)
 */
public class HasPath {
	public boolean hasPath(char[] matrix, int rows, int cols, char[] str) {
		if(matrix.length <= 0 || rows < 0 || cols < 0 || str.length <= 0) {
			return false;
		}
		
		boolean visited[] = new boolean[rows * cols];
		int [] index = {0};
		for(int i = 0;i < rows;i ++) {
			for(int j = 0;j < cols;j ++) {
				if(isPath(matrix, rows, cols, i, j, str, visited, index)) {
					return true;
				}
			}
		}
		return false;
    }
	
	public boolean isPath(char[] matrix, int rows, int cols, int row, int col, char[] str, boolean visited[], int [] index) {
		if(index[0] == str.length) {
			return true;
		}
		
		boolean flag = false; 
		//当前点折算到原数组的位置是:row * cols + col
		if(row >= 0 && row < rows && col >= 0 && col < cols 
		   && !visited[row * cols + col] && matrix[row * cols + col] == str[index[0]]) {
			index[0] ++;	//指针右移
			visited[row * cols + col] = true;
			
			//第一个点是合法的起点之后开始回溯:上下左右进行搜索
			flag = isPath(matrix, rows, cols, row - 1, col, str, visited, index) || 
				   isPath(matrix, rows, cols, row + 1, col, str, visited, index) ||
				   isPath(matrix, rows, cols, row, col - 1, str, visited, index) ||
				   isPath(matrix, rows, cols, row, col + 1, str, visited, index);
			if(!flag) {		//恢复现场
				index[0] --;
				visited[row * cols + col] = false;
			}
		}
		
		return flag;
	}
	
	public static void main(String[] args) {
		String str = "ABCEHJIGSFCSLOPQADEEMNOEADIDEJFMVCEIFGGS";
		char[] matrix = str.toCharArray();
		String str2 = "SGGFIECVAASABCEEJIGOEM";
		char[] c = str2.toCharArray();
		System.out.println(new HasPath().hasPath(matrix, 5, 8, c));
	}
}

#####################

class Solution {
    private:
 
    bool isPath(char *matrix,vector<char> flags,char* str,int x,int y,int rows, int cols)
    {
        if(x<0 || x>=rows || y<0 || y>=cols) //越界的点
            return false;     
 
        if( matrix[x*cols+y]== *str  &&  flags[x*cols+y]==0 )
        {
            flags[x*cols+y]=1;
 
            if(*(str+1)==0)  // 字符串结尾了(最后一个满足的)
                return true;
 
            bool condition =isPath(matrix,flags,(str+1),x,y-1,rows,cols) ||
                isPath(matrix,flags,(str+1),x-1,y,rows,cols)||
                isPath(matrix,flags,(str+1),x,y+1,rows,cols)||
                isPath(matrix,flags,(str+1),x+1,y,rows,cols);           
            if(condition == false)
                flags[x*cols+y]=0;
            return condition;             
        }           
        else
            return false;
 
 
 
 
    }
    public:
    bool hasPath(char* matrix, int rows, int cols, char* str)
    {
         
        vector<char> flags(rows*cols,0);
        bool condition=false;
        for(int i=0;i<rows;i++)
            for(int j=0;j<cols;j++)
            {
                condition= (condition || isPath(matrix,flags,str,i,j,rows,cols) );
            }
        return condition;    
    }
 
};
添加笔记

 

Vivado2019.1 ZYNQ7020无Uart SDK调试打印调试信息xil_printf 阅读详情

相关推荐

矩阵中的路径(C++)

题目: 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如\begin{bmatrix} a & b & c &e \\ s & f & c & s \\ a &...

Jerry_Leo_liu的博客 644

扩散模型在工业缺陷检测中的应用与优化

扩散模型作为生成式AI的重要分支,通过逐步去噪的逆向过程实现高质量数据生成。其核心U-Net架构结合残差连接和时间步嵌入,特别适合处理工业场景中的细微缺陷检测。在计算机视觉领域,这种技术突破了传统深度学习模型对小样本数据的限制,通过域自适应预训练和小样本微调两阶段框架,显著提升金属表面、纺织品等复杂场景的检测准确率。关键技术实现涉及噪声调度优化、多任务损失设计等工程实践,最终在MVTec AD等工业数据集上达到90%以上的检测精度,为智能制造提供可靠的自动化质检方案。

weixin_30512043的博客 497

Leetcode刷题:剑指offer【面试题12 矩阵中的路径】

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

学习 & 分享 ~ 550

用python将dycom .dcm格式图像转换为nifti .nii

因为发现目前搜索到的多数中文教程并不能正确将FMRI图像正确转换,例如很多用simpleITk的seriesreader的,所以写了一下自己正确转换的方法。因为FMRI是一个4D数据,有时间轴,所以用seriesreader读写出来的图像把时间轴维度给降维了。当然你用SPM12工具的dycom import也是能正确转换的,但是我还是喜欢python这样的,代码直接简单。

qq_41103479的博客 3609

Cisco三层交换机的详细配置

** 本文适用于新手小白以及微微基础的同学来用于参考,实验是在Cisco Packet Tracer Student 进行,实验最终效果如图所示,所有命令配置与图中的一致。 使用到的机器型号为:五台电脑,一台服务器,三个普通交换机(2960型号),一个三层交换机(3560-24PS),两台普通服务器(2811) 文章目录一、什么是三层交换机二、配置交换机步骤1.配置二层交换机2.配置三层交换机3.配置两台路由器以及最后一台电脑 一、什么是三层交换机 1.三层交换机 = 三层路由+二层交换机 2.工作在

真正的大师,永远都怀着一颗学徒的心。 4万+

剑指offer算法题【11】:矩阵中的路径(Python实现)

一. 题目 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如[a,b,t,g,c,f,c,s,j,d,e,h 矩阵中包含一条字符串"bfce"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个...

qq_36499794的博客 447

Arduino应用——PWM控制直流电机风扇

Arduino应用——PWM控制直流电机风扇PWM原理实验器件功能描述如何改变文本的样式插入链接与图片实现代码生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 最近在使用arduino UNO开发板完成课程小作业。其中一个要求设计一个电风扇控制系统,要求能够通过PWM调节风扇的转速。期间搜索了许多例程和方法,但受限于器件,效果不

hypecycle的博客 2万+

剑指offer_62:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中任意一格开始,每一步可以在矩阵中向左右上下移动一格。如果一条路径经过了矩阵的某一格,那

题目: 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中任意一格开始,每一步可以在矩阵中向左右上下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3x4的矩阵中包含一条字符串“bcced"的路径。但该矩阵中不包含字符串"abcd",的路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子后,路径不能再次进入这...

王文强的博客 1258

matlab 图像合成_用MATLAB做图像合成加雾的处理

众所周知,现在有很多算法来对图像进行去雾处理。但反之,对图像增加雾的代码却少之又少,本代码就是基于Matlab实现了对图像的加雾处理。该方法可用做雾天图像的合成数据集。代码公开如下:clear;clc; % close all; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%i...

weixin_35719260的博客 2060

【网络安全】Python代码审计高危函数与安全审计建议

Python 灵活且动态的特性使得开发便捷,但同时也带来了严重安全隐患。如果开发者缺乏安全意识,极易引入命令执行、反序列化漏洞及模板注入漏洞。本文总结了 Python 中常见的高危函数、模块和第三方库,并给出对应的审计建议及其原理解析,供安全研究人员和开发者参考。

等风来 416

【剑指Offer】矩阵中的路径:用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径

题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进...

weixin_42956047的博客 592

【运动规划算法项目实战】Artificial Potential Field算法(附ROS C++代码)

在机器人行业中,路径规划是一个关键的任务,它涉及到如何让机器人在复杂的环境中安全而高效地移动。人工势场算法(Artificial Potential Field Algorithm)是一种常用的路径规划方法,它借鉴了物理学中的势能概念,通过模拟力的作用来引导机器人的移动。本文将详细介绍人工势场算法的原理、在路径规划中的应用、算法优缺点以及代码实现。人工势场算法基于两种势场:斥力场和引力场。斥力场使机器人远离障碍物,而引力场将机器人吸引到目标位置。

xiewf的博客 1万+

剑指offer:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。

剑指offer算法题 DFS 回溯 题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如[abcesfcsadee] \left[ \begin{matrix} a & b & c &e \\ s & f & c & s\\ a & d

gaozhuang63的博客 714

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

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

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

(00)剑指 Offer 12. 矩阵中的路径 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。

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

qq_34823218的博客 355

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【剑指offer】判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。(回溯法)

题目描述: 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占...

baidu_29894819的博客 1562

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

《剑指Offer》Java刷题 NO.65 矩阵中的路径(数组、DFS、回溯法、是否存在路径)

《剑指Offer》Java刷题 NO.65 矩阵中的路径(数组、DFS、回溯法) 传送门:《剑指Offer刷题总目录》 时间:2020-07-27 题目: 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如下图 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中

qq_39618369的博客 487

剑指offer——矩阵中的路径

问题描述: 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字

Miracle_shen的博客 1855

[剑指Offer]矩阵中的路径(Java)

题目 矩阵中的路径 -- newcoder 剑指Offer 65 题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。 路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。 如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 a b c e s f c s a d e e 这样的3 X 4 矩阵中包...

聚沙成塔 785

剑指offer第65题:矩阵中的路径

剑指offer第65题:矩阵中的路径题目描述矩阵中的路径源码 题目描述 矩阵中的路径 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bcc...

可爱的小腊肉 278

剑指 Offer 12. 矩阵中的路径

最近做了一个剑指offer上的 剑指 Offer 12. 矩阵中的路径 这道题用了dfs和回溯算法,挺有典型意义的,在这里,列举一个,分析分析,加强记忆。 题目 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用加粗标出)。 [["a","b","c","e"], ["

蓝猫爱睡觉 279

剑指offer 矩阵中的路径

题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 a b c e s f c s a d e e 这样的3 X 4 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符...

try to do 526

剑指Offer12-矩阵中的路径

剑指Offer典型题整理 - 争取做最好的题解 剑指Offer12-矩阵中的路径 整理时间:2020年02月18日 本题和 LeetCode-79 相同 题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的...

哆啦A瑶的博客 597

剑指 Offer 12. 矩阵中的路径 java dfs

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

木竹的博客 166

剑指Offer 矩阵中的路径

剑指Offer 矩阵中的路径 题目描述: 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个...

张毅的博客 426

剑指 Offer 12. 矩阵中的路径 python

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

qq_1277054161 484
上一篇: 【算法/剑指Offer】给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值
下一篇: 【算法/剑指Offer】地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。
HelloZEX
博客等级 码龄11年 486粉丝 264原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值