【算法刷题】—7.27dfs探测环

简介: ✨今日算法一题二维网格中探测环

✨今日算法一题


二维网格中探测环


文章目录


二维网格中探测环


题目描述

思路详解


使用dfs来检测是否有环

有环的条件就是在搜索的过程中搜索到 该次 dfs已经访问过的坐标

定义一个二维数组记录以及访问过的坐标

考虑根据在搜索的过程中添加上一层搜索过来的方向,不搜索该方向的反方向

在这种情况下如果找到已经访问过的节点就说明有环,有环就直接返回


代码与结果

class Solution {
    boolean[][] visited;
    char[][] grid;
    int m, n;
    boolean hasRing;
    public boolean containsCycle(char[][] grid) {
        this.grid = grid;
        m = grid.length; n = grid[0].length;
        visited = new boolean[m][n];
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (!visited[i][j]){
                    dfs(i, j,  grid[i][j], 'L');
                    if (hasRing) return true;
                }
            }
        }
        return false;
    }
    private void dfs(int i, int j,  char ch, char from) {
        if (i < 0 || i >= m || j < 0 || j >= n || grid[i][j] != ch){
            return;
        }
        if (visited[i][j]) {
            hasRing = true;
            return;
        }
        visited[i][j] = true;
        if (from != 'L') dfs(i, j - 1, ch, 'R');
        if (from != 'R') dfs(i, j + 1, ch, 'L');
        if (from != 'U') dfs(i - 1, j, ch, 'D');
        if (from != 'D') dfs(i + 1, j, ch, 'U');
    }
}


✨总结


本节练习了dfs破环,值得多练几次哦!!!


相关文章
|
算法 测试技术 定位技术
数据结构与算法——DFS(深度优先搜索)
数据结构与算法——DFS(深度优先搜索)
|
2月前
|
机器学习/深度学习 算法 C++
【DFS/回溯算法】2016年蓝桥杯真题之路径之谜详解
题目要求根据城堡北墙和西墙箭靶上的箭数,推断骑士从西北角到东南角的唯一路径。每步移动时向正北和正西各射一箭,同一格不重复经过。通过DFS回溯模拟“拔箭”过程,验证路径合法性。已知箭数约束路径唯一,最终按编号输出行走顺序。
|
3月前
|
机器学习/深度学习 算法 机器人
【机器人路径规划】基于深度优先搜索(Depth-First-Search,DFS)算法的机器人路径规划(Python代码实现)
【机器人路径规划】基于深度优先搜索(Depth-First-Search,DFS)算法的机器人路径规划(Python代码实现)
269 3
|
10月前
|
机器学习/深度学习 算法
算法系列之搜索算法-深度优先搜索DFS
深度优先搜索和广度优先搜索一样,都是对图进行搜索的算法,目的也都是从起点开始搜索,直到到达顶点。深度优先搜索会沿着一条路径不断的往下搜索,直到不能够在继续为止,然后在折返,开始搜索下一条候补路径。
817 62
算法系列之搜索算法-深度优先搜索DFS
|
算法
DFS算法的实现
DFS算法的实现
251 3
|
存储 算法 Java
Java中,树与图的算法涉及二叉树的前序、中序、后序遍历以及DFS和BFS搜索。
【6月更文挑战第21天】Java中,树与图的算法涉及二叉树的前序、中序、后序遍历以及DFS和BFS搜索。二叉树遍历通过访问根、左、右子节点实现。DFS采用递归遍历图的节点,而BFS利用队列按层次访问。以下是简化的代码片段:[Java代码略]
202 4
|
存储 算法 C语言
【数据结构与算法 刷题系列】合并两个有序链表
【数据结构与算法 刷题系列】合并两个有序链表
|
算法 vr&ar 计算机视觉
数据结构之洪水填充算法(DFS)
洪水填充算法是一种基于深度优先搜索(DFS)的图像处理技术,主要用于区域填充和图像分割。通过递归或栈的方式探索图像中的连通区域并进行颜色替换。本文介绍了算法的基本原理、数据结构设计(如链表和栈)、核心代码实现及应用实例,展示了算法在图像编辑等领域的高效性和灵活性。同时,文中也讨论了算法的优缺点,如实现简单但可能存在堆栈溢出的风险等。
665 0
|
数据可视化 搜索推荐 Python
Leecode 刷题笔记之可视化六大排序算法:冒泡、快速、归并、插入、选择、桶排序
这篇文章是关于LeetCode刷题笔记,主要介绍了六大排序算法(冒泡、快速、归并、插入、选择、桶排序)的Python实现及其可视化过程。
260 0
【刷题记录】最大公因数,最小公倍数(辗转相除法、欧几里得算法)
【刷题记录】最大公因数,最小公倍数(辗转相除法、欧几里得算法)
278 0

热门文章

最新文章