LeetCode 1034. 边框着色(BFS/DFS)
文章目录
- 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)相关推荐
- LeetCode 490. 迷宫(BFS/DFS)
文章目录 1. 题目 2. 解题 2.1 BFS 2.2 DFS 1. 题目 由空地和墙组成的迷宫中有一个球. 球可以向上下左右四个方向滚动,但在遇到墙壁前不会停止滚动. 当球停下时,可以选择下一个方 ...
- 1034. 边框着色
给出一个二维整数网格 grid,网格中的每个值表示该位置处的网格块的颜色. 只有当两个网格块的颜色相同,而且在四个方向中任意一个方向上相邻时,它们属于同一连通分量. 连通分量的边界是指连通分量中的所有 ...
- Leetcode一起攻克搜索(BFS,DFS,回溯,并查集)
文章目录 BFS简介 DFS简介 回溯简介 并查集简介 DFS题目 690. 员工的重要性 1.dfs解法: 2.bfs算法 547.朋友圈 dfs解法 200.岛屿数量 dfs解法 417.太平洋大 ...
- LeetCode 1263. 推箱子(BFS+DFS / 自定义哈希set)
文章目录 1. 题目 2. 解题 2.1 超时解 2.2 BFS + DFS 1. 题目 「推箱子」是一款风靡全球的益智小游戏,玩家需要将箱子推到仓库中的目标位置. 游戏地图用大小为 n * m 的网 ...
- [Leetcode][第785题][JAVA][判断二分图][BFS][DFS]
[问题描述][中等] [解答思路] 1. DFS 深度优先遍历 时间复杂度:O(N+M) 空间复杂度:O(N) class Solution {private static final int UNC ...
- 动态规划+BFS+DFS+回溯+红黑树+排序+链表+位运算(B站优质学习资源链接,后续会继续更新)
动态规划 正月点灯笼(UP主) 个人主页 https://space.bilibili.com/24014925/channel/detail?cid=12580 动态规划第一讲 https://ww ...
- 邻结矩阵的建立和 BFS,DFS;;
邻结矩阵比较简单,, 它的BFS,DFS, 两种遍历也比较简单,一个用队列, 一个用数组即可!!!但是邻接矩阵极其浪费空间,尤其是当它是一个稀疏矩阵的时候!!!-------------------- ...
- 全局路径规划:图搜索算法介绍1(BFS/DFS)
对于全局路径规划的设计,我们先要了解什么是图搜索,在此之前,要先知道什么是图: 可以看到,图有很多种,有无向图,有向图,节点之间还可以有不同的weight, 用于表述从节点与节点直接迁移的代价. 而图 ...
- 深度搜索 java_java实现的深度搜索与广度搜索算法BFS,DFS以及几种最短路径算法...
java实现的深度搜索与广度搜索算法BFS,DFS以及几种最短路径算法 public class City { String name; int id; static int idCounter = ...
最新文章
- Vista下的Asp.net Mvc安装
- CUBLAS_STATUS_ALLOC_FAILED
- 自学python有哪些网站-python有哪些学习网站
- 利用CSS实现文本省略效果
- lab 2 EIGRP Default Route
- EXCEL去掉所有英文
- lbj学习日记 08 输入一组不定个数的数字,并且把它保存在一个数组中
- 179. Largest Number
- 查看centos是多少位的方式
- AOP和整合mybatis
- mysql错误编号2058_SQLyog连接MySQL时出现的2058错误解决方法
- ElasticSearch用法和IK分词器
- Tensorflow faster RCNN目标检测车牌
- Python电影爬虫,用Excel存储并进行数据可视化分析
- 错误 C2448 “GetFaultEcuName”: 函数样式初始值设定项类似函数定义
- Animation动画效果
- 案例爬取(其一):url获取
- [apidoc]Apidoc-文档生成工具
- 电子计算机师德风范 论文,浅谈师德师风
- 浅谈K8S的容器管理