LeetCode 1559. 二维网格图中探测环

leetcode1559. 二维网格图中探测环(Python3、c++) 文章目录leetcode1559. 二维网格图中探测环方法:并查集思路:代码:Python3:cpp:结果: leetcode1559. 二维网格图中探测环 给你一个二维字符网格数组 grid ,大小为 m x n ,你需要检查 grid 中是否存在 相同值 形成的环。 一个环是一条开始和结束于同一个格子的长度 大于等于 4 的路径。对于一个给定的格子,你可以移动到它上、下、左、右四个方向相邻的格子之一,可以移动的前提是这两个格子有 相同的值 。 同时,你也不能回到上一次移动时所在的格子。比方说,环 (1, 阅读详情

题目链接:LeetCode 1559. 二维网格图中探测环

题意:

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

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

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

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

样例1
输入:grid = [["a","a","a","a"],["a","b","b","a"],["a","b","b","a"],["a","a","a","a"]]
输出:true
解释:如下图所示,有 2 个用不同颜色标出来的环:

样例2

输入:grid = [["c","c","c","a"],["c","d","c","c"],["c","c","e","c"],["f","c","c","c"]]
输出:true
解释:如下图所示,只有高亮所示的一个合法环:

样例3

输入:grid = [["a","b","b"],["b","z","b"],["b","b","a"]]
输出:false

 

解题思路;

   使用并查集判断环

class Solution {
	private $fa = array();
    /**
     * @param String[][] $grid
     * @return Boolean
     */
    function containsCycle($grid) {
    	$n = count($grid);
    	$m = count($grid[0]);
    	$k = 0;
    	for($i = 0; $i < $n; $i++) {
    		for($j = 0; $j < $m; $j++) {
    			$this->fa[$k] = $i * $m + $j;
    			$k++;
    		}
    	}
    	for($i = 0; $i < $n; $i++) {
    		for($j = 0; $j < $m; $j++) {
    			if(($i+1 < $n) && $grid[$i][$j] == $grid[$i+1][$j]) {
    				if(!$this->merge($i*$m+$j, ($i+1)*$m+$j)) {
    					return true;
    				}
    			}
    			if(($j+1 < $m) && $grid[$i][$j] == $grid[$i][$j+1]) {
    				if(!$this->merge($i*$m+$j, $i*$m+$j+1)) {
    					return true;
    				}
    			}
    		}
    	}
    	return false;
    }
	function get($i) {
    	if($i != $this->fa[$i]) {
    		return $this->fa[$i] = $this->get($this->fa[$i]);
    	}
    	return $i;
    }
	function merge($i, $j) {
    	$x = $this->get($i);
    	$y = $this->get($j);
    	if($x != $y) {
    		$this->fa[$x] = $y;
    		return true;   // 如果需要合并返回true
    	} else {
    		return false;  // 已经在一个集合中,说明它是多余的边
    	}
    }
}

 

LeetCode 1559.二维网格图中探测环【深度优先搜索DFS详解】 摘要 LeetCode 1559题要求检测二维字符网格中是否存在由相同字符构成的合法环。合法环定义为:起点终点相同、长度≥4、同字符、只能上下左右移动且不能两步往返。解题采用DFS算法,通过遍历网格中的每个未访问格子作为起点,递归检查四个方向的相邻格子。关键点在于记录父节点坐标以避免误判两步往返为环。当遇到已访问且非父节点的同值格子时判定存在环。算法时间复杂度O(mn),空间复杂度O(mn),适用于最大500×500的网格。DFS实现中需注意全局遍历所有起点、正确记录父节点等易错点。 阅读详情

相关推荐

【C++图论 DFS】1559. 二维网格图中探测环|1837

给你一个二维字符网格数组 grid ,大小为 m x n ,你需要检查 grid 中是否存在 相同值 形成的环。 一个环是一条开始和结束于同一个格子的长度 大于等于 4 的路径。对于一个给定的格子,你可以移动到它上、下、左、右四个方向相邻的格子之一,可以移动的前提是这两个格子有 相同的值 。 同时,你也不能回到上一次移动时所在的格子。比方说,环 (1, 1) -> (1, 2) -> (1, 1) 是不合法的,因为从 (1, 2) 移动到 (1, 1) 回到了上一次移动时的格子。 如果 grid 中有相同

闻缺陷则喜何志丹 4220

Leetcode.1559 二维网格图中探测环

输入:grid = [[“a”,“a”,“a”,“a”],[“a”,“b”,“b”,“a”],[“a”,“b”,“b”,“a”],[“a”,“a”,“a”,“a”]]对于一个给定的格子,你可以移动到它上、下、左、右四个方向相邻的格子之一,可以移动的前提是这两个格子有。在 dfs 的过程中,如果我们访问到了跟当前位置值相同,并且之前访问过的点,就说明存在环,直接返回。同时,你也不能回到上一次移动时所在的格子。,我们只用判断它的右边 和 下面的位置即。中有相同值形成的环,请你返回。回到了上一次移动时的格子。

感觉画质不如...原神的博客 478

Revit模型转点云全流程:从OBJ导出到CloudCompare点云生成(2020版)

本文详细介绍了将Revit模型转换为点云数据的完整流程,特别针对Revit 2020用户。通过使用OBJ导出插件和开源软件CloudCompare,实现从模型导出、网格采样到生成结构化PCD点云的全过程,并提供了关键参数设置与常见问题解决方案,为BIM与三维数字孪生应用提供技术支持。

oo7890的博客 154

1559. 二维网格图中探测环

同时,你也不能回到上一次移动时所在的格子。比方说,环 (1, 1) -> (1, 2) -> (1, 1) 是不合法的,因为从 (1, 2) 移动到 (1, 1) 回到了上一次移动时的格子。对于一个给定的格子,你可以移动到它上、下、左、右四个方向相邻的格子之一,可以移动的前提是这两个格子有 相同的值。给你一个二维字符网格数组 grid ,大小为 m x n ,你需要检查 grid 中是否存在 相同值 形成的环。如果 grid 中有相同值形成的环,请你返回 true ,否则返回 false。

weixin_43327597的博客 570

如何使用Calibre PERC抽出 点到点/p2p 电阻

@[TOC](如何使用Calibre PERC抽点到点(p2p)电阻) 一、前言 需要实现的功能是从gds中抽出net的点到点的电阻。如下图这样。 二、准备工作 lvs rule pex rule(必要时可以自己定义RC rule) gds p2p点的坐标 定义prode.defs 因为p2p的点是变化的,所以每次prode定义都要重新出,对应的perc rule也是根据每个p2p点的定义来的,perc rule也是每次都要重新出。如果需要可以写一个脚本自动出这些定义文件。 PROBE_POINTS

kobayashiyou的博客 1万+

Zemax实战录——非序列模式下的微透镜阵列仿真与优化

本文详细介绍了在Zemax非序列模式下进行微透镜阵列仿真的完整流程与优化技巧。文章重点阐述了从序列模式切换到非序列模式的必要性,并逐步指导如何搭建光源、阵列与探测器的仿真环境。核心在于通过调整圆锥系数等关键参数优化像差,并增加光线数以提升仿真精度与均匀性,为光学设计提供可靠依据。

weixin_28339967的博客 521

小希的迷宫

C -小希的迷宫 Time Limit:1000MSMemory Limit:32768KB64bit IO Format:%I64d & %I64u SubmitStatusPracticeHDU 1272 Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来...

weixin_30338481的博客 195

PINN for PDE(偏微分方程)4 - 反向问题 - Burgers’ equation

PINN for PDE(偏微分方程)4 - 反向问题 - Burgers’ equation

m0_62030579的博客 3003

Leetcode 1559二维网格图中探测环 技巧DFS|剪枝

二维网格图中探测环 给你一个二维字符网格数组 grid ,大小为 m x n ,你需要检查 grid 中是否存在 相同值 形成的环。 一个环是一条开始和结束于同一个格子的长度 大于等于 4 的路径。对于一个给定的格子,你可以移动到它上、下、左、右四个方向相邻的格子之一,可以移动的前提是这两个格子有 相同的值 。 同时,你也不能回到上一次移动时所在的格子。比方说,环 (1, 1) -> (1, 2) -> (1, 1) 是不合法的,因为从 (1, 2) 移动到 (1, 1) 回到了上一次移动.

qq_33859479的博客 597

ESXI添加硬盘时提示 无法创建 VMFS 数据存储 - 无法更改主机配置

ESXI添加硬盘时提示 无法创建 VMFS 数据存储 - 无法更改主机配置1.打开ESXI的SSH2.找到不能添加的硬盘路径3.用SSH操作 1.打开ESXI的SSH 2.找到不能添加的硬盘路径 我的是第一个,找到你要添加但是不能添加的那个硬盘,点进去。 完整的路劲为:1/2 比如我的: /vmfs/devices/disks/t10.ATA_____ST500LT0122D1DG142___________________________________S3PHRNHQ (比较长哈!) 3.用SSH

AI_DOG的博客 2万+

如何用DETR(detection transformer)训练自己的数据集

DETR(detection transformer)简介 DETR是Facebook AI的研究者提出的Transformer的视觉版本,是CNN和transformer的融合,实现了端到端的预测,主要用于目标检测和全景分割。 DETR的Github地址:link

weixin_50233398的博客 3万+

LeetCode 1559. 二维网格图中探测环【网格图DFS,图环】中等

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章中,我不仅会讲解多种解题思路及其优化,还会用多种编程语言实现题解,涉及到通用解法时更将归纳总结出相应的算法模板。。

memcpy0的博客 426

推理引擎终极对决:TensorRT vs ONNX Runtime,YOLOv8速度差30%的核心原因与实操指南

若你使用NVIDIA GPU,且追求极致速度和低延迟,TensorRT是唯一选择,尤其是边缘设备和实时场景;若你需要跨硬件部署、快速验证原型,或预算有限(无需NVIDIA GPU),ONNX Runtime是性价比之王;对于YOLOv8这类检测模型,TensorRT的FP16/INT8量化是“免费的速度提升”,建议优先采用。最后提醒:推理引擎的优化是“细节决定成败”——同样的引擎,不同的预处理方式、显存配置、批大小,都会导致10%-20%的性能差异。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1026

LeetCode -1559 二维网格图中探测环

class Solution { boolean[][] visit; UnionFind uf; public boolean containsCycle(char[][] grid) { int m = grid.length; int n = grid[0].length; visit = new boolean[m][n]; uf = new UnionFind(m*n); f...

qq_44822951的博客 721

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

leetcode 1559. 二维网格图中探测环 中等

对于一个给定的格子,你可以移动到它上、下、左、右四个方向相邻的格子之一,可以移动的前提是这两个格子有。同时,你也不能回到上一次移动时所在的格子。一个环是一条开始和结束于同一个格子的长度。中有相同值形成的环,请你返回。回到了上一次移动时的格子。给你一个二维字符网格数组。

2401_88085478的博客 241

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

leetcode1559.二维网格图中探测环(判断存在环,中等)

判断图中是否存在环有两种方法: 1.并查集,对每条边进行遍历,并将边两边的节点进行合并,如果遍历到一条边,两个端点的findfather相等,则出现了环。 2.DFS。需要注意的是,在下一层搜索的时候,不能往相反的方向搜索!! 方法一:并查集 class Solution { public: vector<int> father; int findfather (int u); bool containsCycle(vector<vector<char....

zhangjiaji111的博客 878

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

LeetCode-Python-1559. 二维网格图中探测环(并查集)

给你一个二维字符网格数组grid,大小为m x n,你需要检查grid中是否存在 相同值 形成的环。 一个环是一条开始和结束于同一个格子的长度 大于等于 4的路径。对于一个给定的格子,你可以移动到它上、下、左、右四个方向相邻的格子之一,可以移动的前提是这两个格子有 相同的值。 同时,你也不能回到上一次移动时所在的格子。比方说,环(1, 1) -> (1, 2) -> (1, 1)是不合法的,因为从 (1, 2)移动到 (1, 1) 回到了上一次移动时的格子。 如果 ...

Keep Coding 602

LeetCode 1559. 二维网格图中探测环 (深度优先搜索dfs)

【代码】LeetCode 1559. 二维网格图中探测环 (深度优先搜索dfs)

记录一些刷过的题并分享学习心得 429

bfs判断无向图里有没有环_leetcode第33双周赛第四题leetcode1559. 二维网格图中探测环...

leetcode1559. 二维网格图中探测环给你一个二维字符网格数组 grid ,大小为 m x n ,你需要检查 grid 中是否存在 相同值 形成的环。一个环是一条开始和结束于同一个格子的长度 大于等于 4 的路径。对于一个给定的格子,你可以移动到它上、下、左、右四个方向相邻的格子之一,可以移动的前提是这两个格子有 相同的值 。同时,你也不能回到上一次移动时所在的格子。比方说,环 (1, 1...

weixin_39906114的博客 494

Leetcode 1559. 二维网格图中探测环 (并查集判断环)

由于不能走回头路,因此如果用DFS判断环,要记录前一步所走的路径,不能回去,比较满分,最直接的方法是用并查集的方式直接判断环。 一般并查集在实现的时候只需要路径压缩,不需要按秩合并。 代码如下: class UnionFind { public: vector<int> parent; public: UnionFind(int n): parent(n) { iota(parent.begin(), parent.end(), 0); ...

wwxy1995的博客 295

leetcode 1559. 二维网格图中探测环-Detect Cycles in 2D Grid

Problem:深度优先搜索,不能访问前一个坐标,不能重复访问状态数组status,字符相同,若字符相同且不是上一个坐标且之前访问过,那么就是一个满足条件的环,可以返回true的。

邹九的个人博客 63

LeetCode题解(1559):二维网格图中探测环(Python)

题目:原题链接(困难) 标签:图、深度优先搜索、广度优先搜索、哈希表 解法 时间复杂度 空间复杂度 执行用时 Ans 1 (Python) O(M×N)O(M×N)O(M×N) O(M×N)O(M×N)O(M×N) 636ms (83%) Ans 2 (Python) Ans 3 (Python) 解法一: class Solution: def containsCycle(self, grid: List[List[str]]) -> bool:

长行 588

LeetCode 补拙笔记 日期:2026.05.29 题目:1559. 二维网格图中探测环

并查集检测环,通过合并相同字符的相邻节点,利用连通性判断环的存在。优化后代码在遍历顺序和并查集初始化上做了简化,逻辑更紧凑。关键技巧:只检查右侧和下侧邻居,避免重复合并;路径压缩优化查找效率。

sheeta1998的博客 283

【Leetcode】双周赛33 二维网格图中探测环

二维网格图中探测环 给你一个二维字符网格数组 grid ,大小为 m x n ,你需要检查 grid 中是否存在 相同值 形成的环。 一个环是一条开始和结束于同一个格子的长度 大于等于 4 的路径。对于一个给定的格子,你可以移动到它上、下、左、右四个方向相邻的格子之一,可以移动的前提是这两个格子有 相同的值 。 同时,你也不能回到上一次移动时所在的格子。比方说,环 (1, 1) -> (1, 2) -> (1, 1) 是不合法的,因为从 (1, 2) 移动到 (1, 1) 回到了上一次移动时的

u014156276的博客 296

LeetCode 5482. 二维网格图中探测环

https://leetcode-cn.com/problems/detect-cycles-in-2d-grid/ dfs深搜找环,关键有两个优化地方: 1.路径中只要包含环就可以,不一定要回到最开始搜索的节点 2.如果一个点不在一个环中,那么后续搜索可以忽略这个节点,因为是多余的。 如果不使用第一个优化,一定要回到最开始的搜索地方,那么第二个优化的地方只能排除最开始的节点,这样会超时,所以两个优化要同时使用 class Solution { public: i..

wwj_bupt 350
上一篇: LeetCode 684. 冗余连接
下一篇: LeetCode 1562. 查找大小为 M 的最新分组
error0318
博客等级 码龄9年 57粉丝 515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值