首页 > 其他 > 详细

leetcode-dfs-130. 被围绕的区域

时间:2021-08-13 14:36:00      阅读:7      评论:0      收藏:0      [点我收藏+]

 

技术分享图片

思想很重要

技术分享图片

 

class Solution {
public:
    void solve(vector<vector<char>>& board) {
        int m = board.size();
        int n = board[0].size();
        // 从边缘开始,因为四周肯定不被包围,和四周O联通的先调用dfs算法标记为A
        for(int i = 0; i < m; i++){
            dfs(board,i,0);
            dfs(board,i,n-1);
        }
        for(int i = 0; i < n; i++){
            dfs(board,0,i);
            dfs(board,m-1,i);
        }
        // 最后剩下的肯定O肯定是被X包围的
        // 最后只需要将标记为A的复原为O,将其余的O改为X即可
        for(int i = 0; i < m; i++){
            for(int j = 0; j < n; j++){
                if(board[i][j] == A)
                    board[i][j] = O;
                else if(board[i][j] == O)
                    board[i][j] = X;
            }
        }
        return;
    }

    void dfs(vector<vector<char>>& board, int i, int j){
        int m = board.size();
        int n = board[0].size();

        if(i>=m||i<0||j>=n||j<0||board[i][j]!=O)
            return;
        board[i][j]=A;
        dfs(board,i+1,j);
        dfs(board,i-1,j);
        dfs(board,i,j+1);
        dfs(board,i,j-1);
    }
};

 

leetcode-dfs-130. 被围绕的区域

原文:https://www.cnblogs.com/ymec/p/15136775.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!