1559. 二维网格图中探测环

1559. 二维网格图中探测环

给你一个二维字符网格数组 grid ,大小为 m x n ,你需要检查 grid 中是否存在 相同值 形成的环。

一个环是一条开始和结束于同一个格子的长度 大于等于 4 的路径。对于一个给定的格子,你可以移动到它上、下、左、右四个方向相邻的格子之一,可以移动的前提是这两个格子有 相同的值 。

同时,你也不能回到上一次移动时所在的格子。比方说,环 (1, 1) -> (1, 2) -> (1, 1) 是不合法的,因为从 (1, 2) 移动到 (1, 1) 回到了上一次移动时的格子。

如果 grid 中有相同值形成的环,请你返回 true ,否则返回 false 。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

解题代码如下:
主要还是深度优先遍历,然后我们需要探讨是不是在遍历过程中,碰到之前遍历过的结点。如果碰到了说明出现了环。

int judez;
void dfs(char** grid,int n,int m, int now_r,int now_c,int **judge_search,char now_ch,int init_r,int init_c,int count,int fx,int fy){int direciton[4][2]={{-1,0},{1,0},{0,-1},{0,1}};for( int i=0;i<4;i++){int noe_r=now_r+direciton[(i+count)%4][0];int noe_c=now_c+direciton[(i+count)%4][1];if(noe_r==init_r&&noe_c==init_c&&count>=3){judez=1;}if(0<=noe_r&&noe_r<n&&0<=noe_c&&noe_c<m&&noe_r!=fx&&noe_c!=fy&&grid[noe_r][noe_c]==now_ch&&judge_search[noe_r][noe_c]==0){judez=1;break;}if(0<=noe_r&&noe_r<n&&0<=noe_c&&noe_c<m&&judge_search[noe_r][noe_c]==1&&grid[noe_r][noe_c]==now_ch){judge_search[noe_r][noe_c]=0;if(judez==0)dfs(grid, n, m,  noe_r, noe_c, judge_search, now_ch, init_r, init_c,count+1, now_r, now_c);}}}bool containsCycle(char** grid, int gridSize, int* gridColSize){int n=gridSize;int m=gridColSize[0];int **judge_search=(int **)malloc(sizeof(int *)*n);for(int i=0;i<n;i++){judge_search[i]=(int *)malloc(sizeof(int )*m);}for(int i=0;i<n;i++){for(int j=0;j<m;j++){judge_search[i][j]=1;}}
//     for(int i=0;i<n;i++){
//         for(int j=0;j<m;j++){
// printf("%d ",judge_search[i][j]);        
// }
//     }judez=0;for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(judez==1){break;}if( judge_search[i][j]==1){judge_search[i][j]=0;dfs(grid, n, m, i, j, judge_search, grid[i][j], i, j,0,-1,-1);}}}
if(judez==1){return true;}
return false;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/44690.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Qt 初识】QPushButton 的详解以及 Qt 中的坐标

文章目录 1. Qt 中的信号槽机制 &#x1f34e;2. 通过图形化界面的方式实现 &#x1f34e;3. 通过纯代码的方式实现按钮版的HelloWorld &#x1f34e;4. 设置坐标 &#x1f34e; 1. Qt 中的信号槽机制 &#x1f34e; 》&#x1f427; 本质就是给按钮的点击操作&#xff0c;关联…

C++之复合资料型态 第一部(参考 列举 指标)

复合资料型态(compound type) 是由其他资料型态(data type) 定义出来的型态&#xff0c; C 中的复合资料型态包括参考(reference) 、列举(enumeration) 、阵列(array) 、指标(pointer ) 、结构(structure) 及联合(union) 。 参考 参考是变数(variable) 的别名(alias) &#x…

GuLi商城-商品服务-API-品牌管理-OSS获取服务端签名(续)

如何进行服务端签名直传_对象存储(OSS)-阿里云帮助中心 gulimall-third-party服务的代码: package com.nanjing.gulimall.thirdparty.controller;import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.common.utils.BinaryUtil; impor…

Linux开发:Fuse介绍

Fuse(filesystem in userspace),是一个用户空间的文件系统。通过fuse内核模块的支持&#xff0c;开发者只需要根据fuse提供的接口实现具体的文件操作时所对应的回调函数&#xff0c;就可以实现一个文件系统。由于其主要实现代码位于用户空间中&#xff0c;因此不需要重新编译内…

实时数仓项目需求及架构设计

第2章实时数仓项目需求及架构设计 2.1 项目需求分析 1&#xff09;采集平台 ​ &#xff08;1&#xff09;用户行为数据采集平台搭建 ​ &#xff08;2&#xff09;业务数据采集平台搭建 2&#xff09;离线需求 … 2.2 项目框架 2.2.1 技术选型 ​ 技术选型主要因素&a…

15 - matlab m_map地学绘图工具基础函数 - 一些数据转换函数(二)

15 - matlab m_map地学绘图工具基础函数 - 一些数据转换函数&#xff08;二&#xff09; 0. 引言1. 关于m_geodesic2. 关于mygrid_sand23. 结语 0. 引言 通过前面篇节已经将m_map绘图工具中大多绘图有关的函数进行过介绍&#xff0c;已经能够满足基本的绘图需求&#xff0c;本节…

探索 `DatagramSocket` 类

DatagramSocket 类是 Java 网络编程中的一个关键组件&#xff0c;专门用于处理 UDP&#xff08;用户数据报协议&#xff09;通信。与基于连接的 TCP 不同&#xff0c;UDP 是一种无连接协议&#xff0c;适用于对速度和效率要求较高&#xff0c;但对可靠性要求相对较低的场景。 …

【JavaScript】包装类

包装类 JS 提供了三个主要的包装类&#xff1a;String、Number、Boolean。如果尝试把原始类型&#xff08;string、number、boolean&#xff09;数据当成对象使用&#xff0c;JS 会自动将其转换为对应包装类的实例。 我们先来看一下 “基本类型数据” 及 “其包装类的实例” …

个人倒计时页面源码,实用倒计时单页源码

一、源码描述 这是一款非常实用的个人倒计时页面&#xff0c;支持设置未来一年时间&#xff0c;支持设置背景音乐&#xff0c;支持自定义下拉页面&#xff0c;点击向下箭头查看。 二、源码截图 三、源码下载

docker 常用命令,后面不断更新

1.从Docker容器中下载文件到本地的方法 使用 docker cp 命令:该命令可以将文件或目录从容器复制到主机。该方法简单快捷&#xff0c;适用于少量文件的下载。 # 将容器名为my_container中的 /data/file.txt文件复制到本地/path/to/save/file.txt docker cp my_container:/data/…

深入探讨【C++容器适配器】:现代编程中的【Stack与Queue】的实现

目录 一、Stack&#xff08;栈&#xff09; 1.1 Stack的介绍 1.2 Stack的使用 1.3 Stack的模拟实现 二、Queue&#xff08;队列&#xff09; 2.1 Queue的介绍 2.2 Queue的使用 2.3 Queue的模拟实现 三、容器适配器 3.1 什么是适配器 3.2 为什么选择deque作为stack和…

kylin入门教程

Apache Kylin的入门教程主要涵盖以下几个方面&#xff1a; 一、Apache Kylin简介 Apache Kylin是一个开源的分布式分析引擎&#xff0c;提供Hadoop之上的SQL接口及多维分析&#xff08;OLAP&#xff09;能力以支持超大规模数据。最初由eBay Inc.开发并贡献至开源社区&#xf…

基于Vue和UCharts的前端组件化开发:实现高效、可维护的词云图与进度条组件

基于Vue和UCharts的前端组件化开发&#xff1a;实现高效、可维护的词云图与进度条组件 摘要 随着前端技术的迅速发展和业务场景的日益复杂&#xff0c;传统的整块应用开发方式已无法满足现代开发的需求。组件化开发作为一种有效的解决方案&#xff0c;能够将系统拆分为独立、…

Shell基础之函数和数组

目录 函数 什么是函数 函数的语法 函数的调用 函数的返回值 函数的案例 函数变量的作用域 递归函数 函数库文件 数组 定义数组语法 数组操作 获取所有元素 获取元素下标 获取数组长度 获取数组元素 数组添加元素 删除数组元素 删除数组 遍历数组元素 数组案…

解决pycharm无法识别miniconda

解决pycharm无法识别miniconda 找到miniconda安装目录下condabin/conda.bat文件&#xff0c;点击load即可识别codna环境 a环境

Spring Boot(七十九):SprngBoot整合Apache tika做文件类型检测

之前有一个章节介绍了Apache tika实现文档内容解析,地址如下:Spring Boot(六十八):SpringBoot 整合Apache tika 实现文档内容解析_springboot tika pptx-CSDN博客 下面我们介绍Apache tika实现文件类型检测 1 引入依赖 <dependency><groupId>org.apache.tika&…

Docker 挂载目录空间占满修改/var/lib/docker/overlay2 的路径解决方案

本文详细描述了在CentOS7系统中卸载旧版Docker、安装依赖、添加Docker源、配置存储路径并启动Docker&#xff0c;使其在/home目录下运行的过程。 以下是在CentOS 7下重新安装Docker并将其安装在/home/下的完整步骤&#xff1a; 卸载旧版本的Docker。如果您之前已经安装了Dock…

仕考网:没有学位证能考公务员吗?

公务员考试需要满足报名条件才能参加&#xff0c;没有学位证能考公吗? 没有学位证书的考生也有机会参与公务员考试虽然可以选择的岗位比较少&#xff0c;但可以报考参加那些不设定学位要求的岗位。当发布的公务员招录信息中某一职位的学位要求标注为“无要求”时&#xff0c;…

【C++】:继承[下篇](友元静态成员菱形继承菱形虚拟继承)

目录 一&#xff0c;继承与友元二&#xff0c;继承与静态成员三&#xff0c;复杂的菱形继承及菱形虚拟继承四&#xff0c;继承的总结和反思 点击跳转上一篇文章&#xff1a; 【C】&#xff1a;继承(定义&&赋值兼容转换&&作用域&&派生类的默认成员函数…

MATLAB Gazebo联合仿真

准备仿真环境&#xff1a;在Gazebo中设置仿真场景&#xff0c;包括机器人模型、环境布局、传感器和执行器等。编写MATLAB脚本&#xff1a;在MATLAB中编写控制算法和数据处理脚本&#xff0c;用于接收Gazebo中的传感器数据&#xff0c;并生成控制命令。建立通信&#xff1a;通过…