news 2026/8/15 4:23:41

算法日常・每日刷题--<BFS>1

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
算法日常・每日刷题--<BFS>1

733. 图像渲染 - 力扣(LeetCode)733. 图像渲染 - 有一幅以 m x n 的二维整数数组表示的图画 image ,其中 image[i][j] 表示该图画的像素值大小。你也被给予三个整数 sr , sc 和 color 。你应该从像素 image[sr][sc] 开始对图像进行上色 填充 。为了完成 上色工作: 1. 从初始像素开始,将其颜色改为 color。 2. 对初始坐标的 上下左右四个方向上 相邻且与初始像素的原始颜色同色的像素点执行相同操作。 3. 通过检查与初始像素的原始颜色相同的相邻像素并修改其颜色来继续 重复 此过程。 4. 当 没有 其它原始颜色的相邻像素时 停止 操作。最后返回经过上色渲染 修改 后的图像 。 示例 1:[https://assets.leetcode.com/uploads/2021/06/01/flood1-grid.jpg]输入: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 < nhttps://leetcode.cn/problems/flood-fill/

题目描述

有一幅以m x n的二维整数数组表示的图画imageimage[i][j]代表像素值。给你起点坐标sr, sc以及目标颜色color,从起点开始做上色填充:

  1. 修改起点像素为目标颜色;
  2. 上下左右 4 个方向扩散,只处理和起点原始颜色相同的连通像素;
  3. 不断重复扩散,直到没有符合条件的相邻像素,返回修改后的图像。

示例 输入: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]]

解题思路

本题属于经典网格连通类题目,可以用BFS 广度优先搜索解决。

  1. 特判边界:如果起点原始颜色已经等于目标颜色,直接返回原图,避免无效循环;
  2. 使用队列存储待处理的坐标点;
  3. 每次从队列取出坐标,修改像素颜色;遍历 4 个方向;
  4. 坐标不越界,并且像素等于原始旧颜色,则将该点入队等待后续处理;
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 prev=image[sr][sc]; if(prev==color) return image; queue<PII>q; q.push({sr,sc}); int m=image.size(),n=image[0].size(); while(q.size()) { auto[a,b]=q.front(); q.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]==prev) { q.push({x,y}); } } } return image; } };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/15 4:19:30

Docker容器CPU与内存限制:原理、配置与生产环境实践

1. 项目概述&#xff1a;为什么需要限制容器的CPU和内存&#xff1f;在服务器上跑Docker容器&#xff0c;如果不加任何限制&#xff0c;就像让一群不知疲倦的工人住进一个资源无限的仓库&#xff0c;他们可以随意取用CPU和内存。听起来很美好&#xff0c;但现实是残酷的。一个失…

作者头像 李华
网站建设 2026/8/15 4:19:25

OpenCloudOS 8.6 部署 OpenClaw AI 智能体:从环境配置到飞书集成实战

1. 项目缘起&#xff1a;为什么要在OpenCloudOS上部署OpenClaw&#xff1f; 最近在折腾本地AI智能体&#xff0c;OpenClaw这个名字出现的频率越来越高。它不像那些动辄需要几十G显存的庞然大物&#xff0c;主打一个轻量、开源&#xff0c;而且能通过插件和技能&#xff08;Ski…

作者头像 李华
网站建设 2026/8/15 4:19:24

内存屏障原理与实战:从乱序执行到多线程同步

1. 从一次诡异的“数据穿越”说起&#xff1a;为什么需要内存屏障&#xff1f;几年前&#xff0c;我负责维护一个高并发的数据采集服务。这个服务很简单&#xff0c;多个线程从网络接收数据包&#xff0c;解析后写入一个共享的内存环形缓冲区&#xff0c;另一个消费者线程从这个…

作者头像 李华
网站建设 2026/8/15 4:19:04

解决Maven编译报错:程序包com.sun.*不存在的三种方案

1. 问题现象与本质剖析如果你是一个Java开发者&#xff0c;尤其是使用Maven作为构建工具&#xff0c;那么你很可能在某个阳光明媚的下午&#xff0c;被一个看似简单却令人困惑的编译错误迎头一击。错误信息通常是这样的&#xff1a;程序包 com.sun.* 不存在&#xff0c;这里的*…

作者头像 李华
网站建设 2026/8/15 4:18:31

彻底解决乱码问题:从原理到实战的编码解码指南

1. 乱码问题&#xff1a;一个看似简单却无处不在的技术“幽灵”如果你在IT行业待过&#xff0c;或者哪怕只是日常使用电脑、手机&#xff0c;你一定遇到过乱码。屏幕上突然冒出一堆“锟斤拷”、“烫烫烫”、问号“&#xff1f;”或者各种看不懂的方块符号&#xff0c;那一刻的困…

作者头像 李华