欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 幼教 > [LeetCode] 733. 图像渲染

[LeetCode] 733. 图像渲染

2024/10/25 16:26:47 来源:https://blog.csdn.net/weixin_65043441/article/details/142982207  浏览:    关键词:[LeetCode] 733. 图像渲染

题目描述:

有一幅以 m x n 的二维整数数组表示的图画 image ,其中 image[i][j] 表示该图画的像素值大小。你也被给予三个整数 sr ,  sc 和 color 。你应该从像素 image[sr][sc] 开始对图像进行上色 填充 。

为了完成 上色工作

  1. 从初始像素开始,将其颜色改为 color
  2. 对初始坐标的 上下左右四个方向上 相邻且与初始像素的原始颜色同色的像素点执行相同操作。
  3. 通过检查与初始像素的原始颜色相同的相邻像素并修改其颜色来继续 重复 此过程。
  4. 当 没有 其它原始颜色的相邻像素时 停止 操作。

最后返回经过上色渲染 修改 后的图像 。

示例 1:

输入:image = [[1,1,1],[1,1,0],[1,0,1]],sr = 1, sc = 1, color = 2

输出:[[2,2,2],[2,2,0],[2,0,1]]

解释:在图像的正中间,坐标 (sr,sc)=(1,1) (即红色像素),在路径上所有符合条件的像素点的颜色都被更改成相同的新颜色(即蓝色像素)。

注意,右下角的像素 没有 更改为2,因为它不是在上下左右四个方向上与初始点相连的像素点。

示例 2:

输入:image = [[0,0,0],[0,0,0]], sr = 0, sc = 0, color = 0

输出:[[0,0,0],[0,0,0]]

解释:初始像素已经用 0 着色,这与目标颜色相同。因此,不会对图像进行任何更改。

提示:

  • m == image.length
  • n == image[i].length
  • 1 <= m, n <= 50
  • 0 <= image[i][j], color < 216
  • 0 <= sr < m
  • 0 <= sc < n

题目链接:

. - 力扣(LeetCode)

解题主要思路:

采用广度优先遍历策略即bfs,比如例1,第一层为image[1][1],我们将它入队列,然后检测它的上下左右,符合要求的为image[0][1]和image[1][0],以此为例继续探索第三层。

解题代码:

class Solution {
public:typedef pair<int, int> PII;int dx[4] = {0, 0, 1, -1};int dy[4] = {1, -1, 0, 0};vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int color) {int pre = image[sr][sc];if (pre == color) return image;int m = image.size(), n = image[0].size();queue<PII> que;que.push(make_pair(sr, sc));while (que.size()) {auto [a, b] = que.front();que.pop();image[a][b] = color;  // 上色for (int i = 0; i < 4; ++i) {// 检测它的上下左右是否需要上色int x = a + dx[i];int y = b + dy[i];if (x >= 0 && x < m && y >= 0 && y < n && image[x][y] == pre) {que.push(make_pair(x, y));}}}return image;}
};

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com