ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

130. 被围绕的区域

2021-10-13 13:01:41  阅读:163  来源: 互联网

标签:vector 区域 int 围绕 dfs 130 board size addright


要求:把被围起来的o改成x但是o在边界的话全都不能改
思路:dfs,当然bfs和并查集也行,用了个数组存了改过的元素发现有o在边界的全部改回来,一遍过了

class Solution {
public:
    void dfs(vector<vector<char>>& board,vector<pair<int,int>> &o,int i,int j,bool &addright){
        if(i<0||i>=board.size()||j<0||j>=board[0].size()||board[i][j]=='X')return;
        if(i==0||i+1==board.size()||j==0||j+1==board[0].size()){
            addright=false;
            return;
        }
        board[i][j]='X';
        o.push_back(make_pair(i,j));
        int di[4]={0,0,1,-1};
        int dj[4]={1,-1,0,0};
        for(int k=0;k<4;++k)
            dfs(board,o,i+di[k],j+dj[k],addright);
    }
    void solve(vector<vector<char>>& board) {
        for(int i=1;i+1<board.size();++i)
            for(int j=1;j+1<board[0].size();++j)
                if(board[i][j]=='O'){
                    vector<pair<int,int>> o;
                    bool addright=true;
                    dfs(board,o,i,j,addright);
                    if(!addright)
                        for(auto p:o)
                            board[p.first][p.second]='O';
                }
    }
};

标签:vector,区域,int,围绕,dfs,130,board,size,addright
来源: https://blog.csdn.net/cx_cs/article/details/120741638

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有