【DFS】130.被围绕的区域

题目

法1:DFS

典型题目,牢记方法!

java 复制代码
class Solution {
    public void solve(char[][] board) {
        int m = board.length, n = board[0].length;
        if (m == 0 || n == 0) {
            return;
        }
        boolean[][] visitedO = new boolean[m][n]; // 没有被围绕的'O'位置记录
        for (int i = 0; i < n; ++i) { // 首行
            dfs(board, visitedO, 0, i, m, n);
        }
        for (int i = 0; i < n; ++i) { // 末行
            dfs(board, visitedO, m - 1, i, m, n);
        }
        for (int i = 0; i < m; ++i) { // 首列
            dfs(board, visitedO, i, 0, m, n);
        }
        for (int i = 0; i < m; ++i) { // 末列
            dfs(board, visitedO, i, n - 1, m, n);
        }

        for (int i = 0; i < m; ++i) {
            for (int j = 0; j < n; ++j) {
                if (board[i][j] == 'O' && !visitedO[i][j]) {
                    board[i][j] = 'X';
                }
            }
        }
    }

    public void dfs(char[][] board, boolean[][] visitedO, int i, int j, int m, int n) {
        if (i >= 0 && i < m 
                && j >= 0 && j < n 
                && board[i][j] == 'O' 
                && !visitedO[i][j]) {
            visitedO[i][j] = true;
            dfs(board, visitedO, i - 1, j, m, n);
            dfs(board, visitedO, i + 1, j, m, n);
            dfs(board, visitedO, i, j - 1, m, n);
            dfs(board, visitedO, i, j + 1, m, n);
        }
    }
}
相关推荐
大胆飞猪7 小时前
dfs二叉树中的深搜(回溯、剪枝)--力扣129、814、230、257
算法·leetcode·深度优先·dfs
小乐xiaole17 小时前
蓝桥杯 2025 C++组 省 B 题解
c++·蓝桥杯·深度优先
wuqingshun3141591 天前
经典算法 判断一个图中是否有环
java·开发语言·数据结构·c++·算法·蓝桥杯·深度优先
wuqingshun3141591 天前
经典算法 判断一个图是不是树
数据结构·c++·算法·蓝桥杯·深度优先
小林熬夜学编程1 天前
【高阶数据结构】第三弹---图的存储与遍历详解:邻接表构建与邻接矩阵的BFS/DFS实现
c语言·数据结构·c++·算法·深度优先·图论·宽度优先
袖清暮雨2 天前
【专题】搜索题型(BFS+DFS)
算法·深度优先·宽度优先
zero.cyx3 天前
蓝桥杯 DFS
算法·蓝桥杯·深度优先
z_y_j2299704383 天前
L2-051 满树的遍历
算法·深度优先
一只鱼^_4 天前
第十六届蓝桥杯大赛软件赛省赛 C/C++ 大学B组
c语言·c++·算法·贪心算法·蓝桥杯·深度优先·图搜索算法
callJJ5 天前
从零开始的图论讲解(1)——图的概念,图的存储,图的遍历与图的拓扑排序
java·数据结构·算法·深度优先·图论·广度优先·图搜索算法