文章目录

  • 1. 题目
  • 2. 解题
    • 2.1 BFS
    • 2.2 DFS

1. 题目

给出一个二维整数网格 grid,网格中的每个值表示该位置处的网格块的颜色。

只有当两个网格块的颜色相同,而且在四个方向中任意一个方向上相邻时,它们属于同一连通分量。

连通分量的边界是指连通分量中的所有与不在分量中的正方形相邻(四个方向上)的所有正方形,或者在网格的边界上(第一行/列或最后一行/列)的所有正方形。

给出位于 (r0, c0) 的网格块和颜色 color,使用指定颜色 color 为所给网格块的连通分量的边界进行着色,并返回最终的网格 grid 。

示例 1:
输入:grid = [[1,1],[1,2]],
r0 = 0, c0 = 0, color = 3
输出:[[3, 3], [3, 2]]示例 2:
输入:grid = [[1,2,2],[2,3,2]],
r0 = 0, c0 = 1, color = 3
输出:[[1, 3, 3], [2, 3, 3]]示例 3:
输入:grid = [[1,1,1],[1,1,1],[1,1,1]],
r0 = 1, c0 = 1, color = 2
输出:[[2, 2, 2], [2, 1, 2], [2, 2, 2]]提示:
1 <= grid.length <= 50
1 <= grid[0].length <= 50
1 <= grid[i][j] <= 1000
0 <= r0 < grid.length
0 <= c0 < grid[0].length
1 <= color <= 1000

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/coloring-a-border
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 简单的BFS/DFS即可
  • 判断条件:周围点出界,或 周围的点颜色不同,就把当前点标记为边界

2.1 BFS

class Solution {public:vector<vector<int>> colorBorder(vector<vector<int>>& grid, int r0, int c0, int color) {int m = grid.size(), n = grid[0].size(), i, j, k, x, y;vector<vector<int>> dir = {{1,0},{0,1},{0,-1},{-1,0}};int origin = grid[r0][c0];vector<vector<bool>> vis(m, vector<bool>(n, false));queue<pair<int,int>> q;q.push(make_pair(r0, c0));vis[r0][c0] = true;while(!q.empty()){i = q.front().first;j = q.front().second;q.pop();for(k = 0; k < 4; ++k){x = i + dir[k][0];y = j + dir[k][1];if(x >=0 && x<m && y>=0 && y<n)//在界内{if(vis[x][y]) continue;//访问过了,下一个if(grid[x][y] != origin)//没有访问,颜色不同grid[i][j] = color;// i, j 旁边的 x, y跟它不一样,边界else//没有访问,颜色一样,正常入队{q.push({x,y});vis[x][y] = true;}}else//出界了grid[i][j] = color;//i,j 是边界}}return grid;}
};

40 ms 13 MB

2.2 DFS

class Solution {vector<vector<int>> dir = {{1,0},{0,1},{0,-1},{-1,0}};int m, n, origin, col;
public:vector<vector<int>> colorBorder(vector<vector<int>>& grid, int r0, int c0, int color) {m = grid.size(), n = grid[0].size();origin = grid[r0][c0], col = color;vector<vector<bool>> vis(m, vector<bool>(n, false));vis[r0][c0] = true;dfs(grid,r0,c0,vis);return grid;}void dfs(vector<vector<int>>& grid, int i, int j, vector<vector<bool>>& vis){int x, y, k;for(k = 0; k < 4; ++k){x = i + dir[k][0];y = j + dir[k][1];if(x >=0 && x<m && y>=0 && y<n)//在界内{if(vis[x][y]) continue;//访问过了,下一个if(grid[x][y] != origin)//没有访问,颜色不同grid[i][j] = col;// i, j 旁边的 x, y跟它不一样,边界else//没有访问,颜色一样{vis[x][y] = true;dfs(grid, x, y, vis);}}else//出界了grid[i][j] = col;//i,j 是边界}}
};

36 ms 12.9 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 1034. 边框着色(BFS/DFS)相关推荐

  1. LeetCode 490. 迷宫(BFS/DFS)

    文章目录 1. 题目 2. 解题 2.1 BFS 2.2 DFS 1. 题目 由空地和墙组成的迷宫中有一个球. 球可以向上下左右四个方向滚动,但在遇到墙壁前不会停止滚动. 当球停下时,可以选择下一个方 ...

  2. 1034. 边框着色

    给出一个二维整数网格 grid,网格中的每个值表示该位置处的网格块的颜色. 只有当两个网格块的颜色相同,而且在四个方向中任意一个方向上相邻时,它们属于同一连通分量. 连通分量的边界是指连通分量中的所有 ...

  3. Leetcode一起攻克搜索(BFS,DFS,回溯,并查集)

    文章目录 BFS简介 DFS简介 回溯简介 并查集简介 DFS题目 690. 员工的重要性 1.dfs解法: 2.bfs算法 547.朋友圈 dfs解法 200.岛屿数量 dfs解法 417.太平洋大 ...

  4. LeetCode 1263. 推箱子(BFS+DFS / 自定义哈希set)

    文章目录 1. 题目 2. 解题 2.1 超时解 2.2 BFS + DFS 1. 题目 「推箱子」是一款风靡全球的益智小游戏,玩家需要将箱子推到仓库中的目标位置. 游戏地图用大小为 n * m 的网 ...

  5. [Leetcode][第785题][JAVA][判断二分图][BFS][DFS]

    [问题描述][中等] [解答思路] 1. DFS 深度优先遍历 时间复杂度:O(N+M) 空间复杂度:O(N) class Solution {private static final int UNC ...

  6. 动态规划+BFS+DFS+回溯+红黑树+排序+链表+位运算(B站优质学习资源链接,后续会继续更新)

    动态规划 正月点灯笼(UP主) 个人主页 https://space.bilibili.com/24014925/channel/detail?cid=12580 动态规划第一讲 https://ww ...

  7. 邻结矩阵的建立和 BFS,DFS;;

    邻结矩阵比较简单,, 它的BFS,DFS, 两种遍历也比较简单,一个用队列, 一个用数组即可!!!但是邻接矩阵极其浪费空间,尤其是当它是一个稀疏矩阵的时候!!!-------------------- ...

  8. 全局路径规划:图搜索算法介绍1(BFS/DFS)

    对于全局路径规划的设计,我们先要了解什么是图搜索,在此之前,要先知道什么是图: 可以看到,图有很多种,有无向图,有向图,节点之间还可以有不同的weight, 用于表述从节点与节点直接迁移的代价. 而图 ...

  9. 深度搜索 java_java实现的深度搜索与广度搜索算法BFS,DFS以及几种最短路径算法...

    java实现的深度搜索与广度搜索算法BFS,DFS以及几种最短路径算法 public class City { String name; int id; static int idCounter = ...

最新文章

  1. Vista下的Asp.net Mvc安装
  2. CUBLAS_STATUS_ALLOC_FAILED
  3. 自学python有哪些网站-python有哪些学习网站
  4. 利用CSS实现文本省略效果
  5. lab 2 EIGRP Default Route
  6. EXCEL去掉所有英文
  7. lbj学习日记 08 输入一组不定个数的数字,并且把它保存在一个数组中
  8. 179. Largest Number
  9. 查看centos是多少位的方式
  10. AOP和整合mybatis
  11. mysql错误编号2058_SQLyog连接MySQL时出现的2058错误解决方法
  12. ElasticSearch用法和IK分词器
  13. Tensorflow faster RCNN目标检测车牌
  14. Python电影爬虫,用Excel存储并进行数据可视化分析
  15. 错误    C2448    “GetFaultEcuName”: 函数样式初始值设定项类似函数定义
  16. Animation动画效果
  17. 案例爬取(其一):url获取
  18. [apidoc]Apidoc-文档生成工具
  19. 电子计算机师德风范 论文,浅谈师德师风
  20. 浅谈K8S的容器管理

热门文章

  1. python画两条曲线图_python绘制多个曲线的折线图
  2. JavaWeb笔记01-XML
  3. 【SSL】HTTPS配置全过程
  4. mysql启动和关闭外键约束的方法(FOREIGN_KEY_CHECKS)
  5. 【Python】模拟面试技术面试题答
  6. pycharm 快捷键大全
  7. linux驱动 cdev,inode结构体
  8. 理解C++中拷贝构造函数
  9. java聊天软件课程设计_[计算机课程设计] JAVA课程设计-聊天室
  10. 树莓派3B+学习笔记:4、查看GPIO