【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);
        }
    }
}
相关推荐
2301_8002561121 小时前
【人工智能引论期末复习】第3章 搜索求解2 - 对抗搜索
人工智能·算法·深度优先
hweiyu002 天前
强连通分量算法:Kosaraju算法
算法·深度优先
豆沙沙包?3 天前
2026年--Lc336-1448. 统计二叉树中好节点的数目(树)--java版
java·开发语言·深度优先
l1t3 天前
郭其先生利用DeepSeek实现的PostgreSQL递归CTE实现DFS写法
sql·算法·postgresql·深度优先
LightYoungLee3 天前
算法(五)树 Trees V2
学习·算法·深度优先
源代码•宸4 天前
Leetcode—1123. 最深叶节点的最近公共祖先【中等】
经验分享·算法·leetcode·职场和发展·golang·dfs
源代码•宸4 天前
Leetcode—865. 具有所有最深节点的最小子树【中等】
开发语言·经验分享·后端·算法·leetcode·golang·dfs
Tisfy4 天前
LeetCode 0865.具有所有最深节点的最小子树:深度优先搜索(一次DFS + Python5行)
算法·leetcode·深度优先·dfs·题解
闻缺陷则喜何志丹4 天前
【图论 DFS 换根法】3772. 子图的最大得分|2235
c++·算法·深度优先·力扣·图论·换根法
Tisfy6 天前
LeetCode 1339.分裂二叉树的最大乘积:深度优先搜索(一次DFS+存数组并遍历)
算法·leetcode·深度优先·题解