【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);
        }
    }
}
相关推荐
闪电麦坤9512 小时前
数据结构:深度优先搜索 (Depth-First Search, DFS)
数据结构·深度优先
heyCHEEMS1 天前
路径总和 Ⅱ Java
java·开发语言·深度优先
KarrySmile2 天前
网格图--Day04--网格图DFS--2684. 矩阵中移动的最大次数,1254. 统计封闭岛屿的数目,130. 被围绕的区域
矩阵·深度优先·dfs·深度优先搜索·灵茶山艾府·网格图·网格图dfs
zc.ovo2 天前
牛子图论1(二分图+连通性)
数据结构·c++·算法·深度优先·图论
何妨重温wdys4 天前
跳跃游戏(二):DFS 求解最少跳跃次数与最优路径
算法·深度优先
hansang_IR4 天前
【题解 | 两种做法】洛谷 P4208 [JSOI2008] 最小生成树计数 [矩阵树/枚举]
c++·算法·dfs·题解·枚举·最小生成树·矩阵树定理
执子手 吹散苍茫茫烟波4 天前
leetcode46.全排列
java·leetcode·链表·深度优先·回溯法
熬了夜的程序员6 天前
【LeetCode】30. 串联所有单词的子串
算法·leetcode·链表·职场和发展·深度优先
sssvangen7 天前
数字接龙(dfs)(蓝桥杯)
算法·蓝桥杯·深度优先
爱coding的橙子8 天前
每日算法刷题Day65:8.27:leetcode dfs11道题,用时2h30min
算法·leetcode·深度优先