【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);
        }
    }
}
相关推荐
仟濹11 小时前
算法打卡 day1 (2026-02-06 周四) | 算法: DFS | 1_卡码网98 可达路径 | 2_力扣797_所有可能的路径
算法·leetcode·深度优先
仟濹12 小时前
算法打卡day2 (2026-02-07 周五) | 算法: DFS | 3_卡码网99_计数孤岛_DFS
算法·深度优先
木井巳16 小时前
【递归算法】二叉搜索树中第K小的元素
java·算法·leetcode·深度优先·剪枝
小辉同志17 小时前
437. 路径总和 III
算法·深度优先·广度优先
wangjialelele1 天前
平衡二叉搜索树:AVL树和红黑树
java·c语言·开发语言·数据结构·c++·算法·深度优先
近津薪荼1 天前
dfs专题5——(二叉搜索树中第 K 小的元素)
c++·学习·算法·深度优先
近津薪荼1 天前
dfs专题4——二叉树的深搜(验证二叉搜索树)
c++·学习·算法·深度优先
WHD3062 天前
苏州误删除 格式化 服务器文件 恢复
随机森林·支持向量机·深度优先·爬山算法·宽度优先·推荐算法·最小二乘法
我爱工作&工作love我3 天前
P4913 【深基16.例3】二叉树深度 dfs-二叉树的遍历
算法·深度优先·图论
啊阿狸不会拉杆3 天前
《机器学习导论》第3章 -贝叶斯决策理论
人工智能·python·算法·机器学习·numpy·深度优先·贝叶斯决策理论