【力扣·每日一题】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] 的连接组件的边框着色。
返回最终网格。
*/


目录
相关文章
|
2月前
|
存储 编译器 C语言
【c++丨STL】vector的使用
本文介绍了C++ STL中的`vector`容器,包括其基本概念、主要接口及其使用方法。`vector`是一种动态数组,能够根据需要自动调整大小,提供了丰富的操作接口,如增删查改等。文章详细解释了`vector`的构造函数、赋值运算符、容量接口、迭代器接口、元素访问接口以及一些常用的增删操作函数。最后,还展示了如何使用`vector`创建字符串数组,体现了`vector`在实际编程中的灵活性和实用性。
73 4
|
23天前
|
存储 对象存储 C++
C++ 中 std::array<int, array_size> 与 std::vector<int> 的深入对比
本文深入对比了 C++ 标准库中的 `std::array` 和 `std::vector`,从内存管理、性能、功能特性、使用场景等方面详细分析了两者的差异。`std::array` 适合固定大小的数据和高性能需求,而 `std::vector` 则提供了动态调整大小的灵活性,适用于数据量不确定或需要频繁操作的场景。选择合适的容器可以提高代码的效率和可靠性。
51 0
|
27天前
|
存储 编译器 C语言
【c++丨STL】vector模拟实现
本文深入探讨了 `vector` 的底层实现原理,并尝试模拟实现其结构及常用接口。首先介绍了 `vector` 的底层是动态顺序表,使用三个迭代器(指针)来维护数组,分别为 `start`、`finish` 和 `end_of_storage`。接着详细讲解了如何实现 `vector` 的各种构造函数、析构函数、容量接口、迭代器接口、插入和删除操作等。最后提供了完整的模拟实现代码,帮助读者更好地理解和掌握 `vector` 的实现细节。
33 0
|
3月前
|
存储 C++ 索引
【C++打怪之路Lv9】-- vector
【C++打怪之路Lv9】-- vector
29 1
|
3月前
|
编译器 C++
【C++】—— vector模拟实现
【C++】—— vector模拟实现
|
3月前
|
算法 C++ 容器
C++之打造my vector篇(下)
C++之打造my vector篇(下)
40 0
|
3月前
|
存储 编译器 C++
C++之打造my vector篇(上)
C++之打造my vector篇(上)
36 0
|
3月前
|
算法 C++ 容器
【C++】—— vector使用
【C++】—— vector使用
|
3月前
|
存储 缓存 C++
C++番外篇——list与vector的比较
C++番外篇——list与vector的比较
32 0
|
3月前
|
C++
C++番外篇——vector的实现
C++番外篇——vector的实现
52 0