LeetCode——边界着色 C++

题目取自LeetCode:

       本题目为DFS深度搜索的变种题,可以采用DFS的思想进行遍历,但是要注意本题中只需要对边界进行染色,而DFS遍历的时候是将全部都进行染色,因此需要建立备份矩阵进行染色记录。

      

完整代码如下:

    vector<vector<int>>grid_new;
    bool isok(vector<vector<int>>& grid,int row,int col,int color_1){//判断是否是连通分量边界进行染色
        if(row-1<0||row+1>grid.size()-1||grid[row-1][col]!=color_1||grid[row+1][col]!=color_1)return true;
        if(col-1<0||col+1>grid[0].size()-1||grid[row][col-1]!=color_1||grid[row][col+1]!=color_1)return true;
        return false;
    }
    void dfs(vector<vector<int>>& grid,vector<vector<int>>& grid1,int row, int col,int color_1,int color){
        if(row<0||row>grid.size()-1||col<0||col>grid[0].size()-1||grid1[row][col]!=color_1)return;//合法性判断
        if(isok(grid,row,col,color_1))grid_new[row][col]=color;
        grid1[row][col]=color;//对备份矩阵染色
        dfs(grid,grid1,row-1,col,color_1,color);
        dfs(grid,grid1,row+1,col,color_1,color);
        dfs(grid,grid1,row,col-1,color_1,color);
        dfs(grid,grid1,row,col+1,color_1,color);
    }
    vector<vector<int>> colorBorder(vector<vector<int>>& grid, int row, int col, int color) {
        grid_new.clear();
        grid_new=grid;
        vector<vector<int>> grid1=grid;
        if(color==grid[row][col])return grid_new;
        dfs(grid,grid1,row,col,grid[row][col],color);
        return grid_new;
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值