【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);
        }
    }
}
相关推荐
single59421 小时前
【c++笔试强训】(第四十一篇)
java·c++·算法·深度优先·图论·牛客
清弦墨客21 小时前
【数据结构与算法】深度优先搜索:树与图的路径探寻之道
数据结构·python·算法·蓝桥杯·深度优先
_nut_21 小时前
图论基础算法/DFS+BFS+Trie树
算法·深度优先·图论
mit6.8242 天前
[数据结构#2] 图(1) | 概念 | 邻接矩阵 | 邻接表 | 模拟
算法·深度优先·图论
礁之3 天前
Fastdfs V6.12.1集群部署(arm/x86均可用)
docker·云原生·dfs
牧歌悠悠3 天前
【深度学习】 零基础介绍卷积神经网络(CNN)
人工智能·深度学习·cnn·深度优先
菜鸟起航ing7 天前
数据结构---图(Graph)
java·数据结构·算法·深度优先
robin_suli7 天前
穷举vs暴搜vs深搜vs回溯vs剪枝专题一>子集
算法·dfs·剪枝·回溯
robin_suli7 天前
穷举vs暴搜vs深搜vs回溯vs剪枝系列一>找出所有子集的异或总和再求和
算法·dfs·剪枝·回溯
想喝冰拿铁7 天前
图论笔记1
笔记·深度优先·图论