【力扣·每日一题】1034. 边界着色(C++ dfs 二维vector)

简介: 【力扣·每日一题】1034. 边界着色(C++ dfs 二维vector)

linkk

题意:

20200401134307494.png

20200401134307494.png

思路:

数据范围不大,可以直接d f s,对于每个点都遍历和他相邻的并且未被访问的点,看下一个点是否越界或颜色和该点相同。

具体的逻辑判断在代码里。

代码:

class Solution {
public:
    vector<vector<int>> ne = {{1,0},{0,1},{0,-1},{-1,0}};
    int n,m,las,colo;
    vector<vector<int>> colorBorder(vector<vector<int>>& grid, int row, int col, int color) {
        n=grid.size();m=grid[0].size();
        vector<vector<bool>> vis(n, vector<bool>(m, false));
        vis[row][col]=true;
        dfs(grid,row,col,color,grid[row][col],vis);
        return grid;
    }
    void dfs(vector<vector<int>>& grid, int row, int col,int colo,int las,vector<vector<bool>>&vis){
        for(int i=0;i<4;i++){
            int x=row+ne[i][0],y=col+ne[i][1];
            if(x>=0&&x<n&&y>=0&&y<m){//未越界
                if(vis[x][y]) continue;
                if(grid[x][y]!=las){//不同色 上一个点是边界
                    grid[row][col]=colo;
                }
                else{
                    vis[x][y]=true;//标记
                    dfs(grid,x,y,colo,las,vis);
                }
            }
            else grid[row][col]=colo;//越界后的上一个点是边界
        }
    }
};
/*
给定一个 m x n 整数矩阵网格,以及三个整数 row、col 和 color。 网格中的每个值代表该位置的网格方块的颜色。
如果两个正方形具有相同的颜色并且在 4 个方向中的任何一个方向上彼此相邻,则它们属于同一个连通分量。
连通分量的边界是连通分量中与不在该分量中的正方形在 4 方向上相邻的所有正方形,或者在网格边界(第一行或最后一行或列)上的所有正方形。
您应该使用颜色为包含方形 grid[row][col] 的连接组件的边框着色。
返回最终网格。
*/


目录
相关文章
|
9天前
|
C++
c++的学习之路:13、vector(2)
c++的学习之路:13、vector(2)
20 0
|
20天前
|
算法 Java C语言
C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
|
7天前
[leetcode~dfs]1261. 在受污染的二叉树中查找元素
[leetcode~dfs]1261. 在受污染的二叉树中查找元素
[leetcode~dfs]1261. 在受污染的二叉树中查找元素
|
8天前
|
存储 缓存 编译器
【C++进阶(五)】STL大法--list模拟实现以及list和vector的对比
【C++进阶(五)】STL大法--list模拟实现以及list和vector的对比
|
8天前
|
编译器 C++
【C++进阶(三)】STL大法--vector迭代器失效&深浅拷贝问题剖析
【C++进阶(三)】STL大法--vector迭代器失效&深浅拷贝问题剖析
|
8天前
|
存储 C语言 C++
【C++进阶(二)】STL大法--vector的深度剖析以及模拟实现
【C++进阶(二)】STL大法--vector的深度剖析以及模拟实现
|
9天前
|
存储 C++ 容器
c++的学习之路:12、vector(1)
c++的学习之路:12、vector(1)
13 0
|
存储 编译器 Linux
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
|
15天前
|
算法 定位技术
【leetcode】剑指 Offer II 105. 岛屿的最大面积-【深度优先DFS】
【leetcode】剑指 Offer II 105. 岛屿的最大面积-【深度优先DFS】
17 0
|
19天前
|
存储 算法 编译器
【C++初阶】STL详解(三)vector的介绍与使用
【C++初阶】STL详解(三)vector的介绍与使用
36 0