程序员面试金典 - 面试题 08.10. 颜色填充(BFS/DFS)

1. 题目

颜色填充。编写函数,实现许多图片编辑软件都支持的“颜色填充”功能。

给定一个屏幕(以二维数组表示,元素为颜色值)、一个点和一个新的颜色值,将新颜色值填入这个点的周围区域,直到原来的颜色值全都改变。

示例1:输入:
image = [[1,1,1],[1,1,0],[1,0,1]] 
sr = 1, sc = 1, newColor = 2输出:[[2,2,2],[2,2,0],[2,0,1]]解释: 
在图像的正中间,(坐标(sr,sc)=(1,1)),
在路径上所有符合条件的像素点的颜色都被更改成2。
注意,右下角的像素没有更改为2,
因为它不是在上下左右四个方向上与初始点相连的像素点。说明:
image 和 image[0] 的长度在范围 [1, 50] 内。
给出的初始点将满足 0 <= sr < image.length 和 0 <= sc < image[0].length。
image[i][j] 和 newColor 表示的颜色值在范围 [0, 65535]内。

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

2. 解题

  • 标准的广度和深度优先搜索,模板题

2.1 BFS

class Solution {
public:vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int newColor) {int m = image.size(), n = image[0].size();int original = image[sr][sc], k, x, y, x0, y0;vector<vector<int>> dir = {{1,0},{0,1},{0,-1},{-1,0}};queue<vector<int>> q;vector<vector<bool>> visited(m, vector<bool>(n,false));q.push({sr,sc});visited[sr][sc] = true;image[sr][sc] = newColor;while(!q.empty()){x0 = q.front()[0];y0 = q.front()[1];q.pop();for(k = 0; k < 4; ++k){x = x0+dir[k][0];y = y0+dir[k][1];if(x>=0 && x<m && y>=0 && y<n && !visited[x][y] && image[x][y]==original){q.push({x,y});visited[x][y] = true;image[x][y] = newColor;}}}return image;}
};

在这里插入图片描述

2.2 DFS

class Solution {vector<vector<int>> dir = {{1,0},{0,1},{0,-1},{-1,0}};int m, n, original;vector<vector<bool>> visited;
public:vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int newColor) {m = image.size(), n = image[0].size();original = image[sr][sc];visited.resize(m, vector<bool>(n,false));visited[sr][sc] = true;image[sr][sc] = newColor;dfs(image,sr,sc,newColor);return image;}void dfs(vector<vector<int>>& image, int x0, int y0, int newColor){int x, y;for(int k = 0; k < 4; ++k){x = x0+dir[k][0];y = y0+dir[k][1];if(x>=0 && x<m && y>=0 && y<n && !visited[x][y] && image[x][y]==original){visited[x][y] = true;image[x][y] = newColor;dfs(image,x,y,newColor);//占领即可,不必回溯}}}
};

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/476896.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

excel两列数据对比找不同_Excel“找不同”小妙招来啦,请查收

1、同表格两列数据找不同(1)对应位置找不同方法&#xff1a;选中待对比区域&#xff0c;按【Ctrl】组合键即可将不同之处标注出来。(2)位置不定找不同方法&#xff1a;依次点击“开始——条件格式——突出显示单元格显示规则——重复值”&#xff0c;然后设置对应突出显示颜色即…

谷歌PaLM杀疯了,已从语言模型进化成机器人大脑??

文 | 天于刀刀开篇小编想了解一下&#xff0c;有多少小伙伴和我一样在看完《复联》后对钢铁侠托尼的智能管家贾维斯非常眼馋&#xff0c;然后坚定了自己 all in 人工智能算法这条&#xff08;不归&#xff09;路的&#xff1f;理想中&#xff1a;你是个成熟的 AI 管家&#xff…

程序员面试金典 - 面试题 17.04. 消失的数字(数学/位运算)

1. 题目 数组 nums 包含从0到n的所有整数&#xff0c;但其中缺了一个。 请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗&#xff1f; 注意&#xff1a;本题相对书上原题稍作改动 示例 1&#xff1a; 输入&#xff1a;[3,0,1] 输出&#xff1a;2示例 2&#xff1…

前两年在MSDN里找到的HTC示例,一直没用过,先在这里存个备份

下载地址&#xff1a;http://files.cnblogs.com/bobowu/HTC%20Sample%20from%20MSDN.zip包括&#xff1a;calendar、colorpick、coolbar、dataselect、imagerollover、mask、menu、movable、mpc、rowover、slider、tooltips最近只用过movable来实现在地图的拖动效果&#xff0c…

文件标识符无效。使用 fopen 生成有效的文件标识符。_「存储架构」块存储、文件存储和对象存储(第1节)...

全球传输和生成的数据比以往任何时候都多。国际数据公司(IDC)的分析师预计&#xff0c;到2025年&#xff0c;全球数据层将增至163zb。这比2016年16.1 ZB的数据增长了1000%以上。数据大量增加的原因是多方面的:生成数据的来源和设备比以前多得多——嵌入式系统和设备正在收集数据…

微软,把数据中心部署到了海底…

源 | 直观学机械、蓝点网2014年微软首次提出了水下数据中心概念&#xff0c;当时认为这个概念有望为沿海人口提供高速云服务&#xff0c;并节省能源。2015年&#xff0c;微软在太平洋开展为期105天的部署过程中证明了水下数据中心概念是切实可行的。2018年&#xff0c;微软把一…

程序员面试金典 - 面试题 16.15. 珠玑妙算(map计数)

1. 题目 珠玑妙算游戏&#xff08;the game of master mind&#xff09;的玩法如下。 计算机有4个槽&#xff0c;每个槽放一个球&#xff0c;颜色可能是红色&#xff08;R&#xff09;、黄色&#xff08;Y&#xff09;、绿色&#xff08;G&#xff09;或蓝色&#xff08;B&am…

python方向键控制角色_python方向键控制上下左右代码

本文所示代码实现python编程方向键控制图片上下左右&#xff0c;我们首先看下演示结果。 演示&#xff1a;实例代码&#xff1a; bif"1.jpg" mif"2.jpg" import pygame,sys from pygame.locals import * pygame.init() screenpygame.display.set_mode((640…

测试ASP.NET 2.0中Gridview控件高级技巧

ASP.NET 2.0中&#xff0c;新增加的gridview控件的确十分强大&#xff0c;弥补了在asp.net 1.1中&#xff0c;使用datagrid控件时的不足之处。因为在asp.net 1.1中&#xff0c;在使用datagrid时&#xff0c;很多情况下依然要编写大量的代码&#xff0c;十分不方便&#xff0c;而…

一场AI技术引发的金融业“降本增效”

文 | 卖萌酱大家好&#xff0c;我是卖萌酱。“全面赋能千行百业”是AI的重要使命&#xff0c;政务、法律、金融、医疗、制造等传统行业往往智能化程度低&#xff0c;在效率、成本和收益方面蕴藏着巨大的优化空间。其中&#xff0c;金融业&#xff0c;就正在AI技术的赋能下&…

LeetCode 999. 车的可用捕获量

1. 题目 在一个 8 x 8 的棋盘上&#xff0c;有一个白色车&#xff08;rook&#xff09;。也可能有空方块&#xff0c;白色的象&#xff08;bishop&#xff09;和黑色的卒&#xff08;pawn&#xff09;。它们分别以字符 “R”&#xff0c;“.”&#xff0c;“B” 和 “p” 给出…

matlab 转换为正整数_【MATLAB】专题1笔记 MATLAB基础知识

视频课程参考&#xff1a;https://www.bilibili.com/video/BV19J411W7Ta数值问题-->求解算法-->程序实现-->结果分析MATLAB 功能 &#xff1a;数值计算&#xff0c;符号计算&#xff0c;图形绘制&#xff0c;程序流程绘制&#xff0c;工具箱数值计算方法&#xff1a…

showModalDialog和showModelessDialog使用心得

一、showModalDialog和showModelessDialog有什么不同&#xff1f;  showModalDialog&#xff1a;被打开后就会始终保持输入焦点。除非对话框被关闭&#xff0c;否则用户无法切换到主窗口。类似alert的运行效果。  showModelessDialog&#xff1a;被打开后&#xff0c;用户可…

python网络编程内容_Python网络编程

本文要写的内容也称为Python套接字编程&#xff0c;并简单介绍socketserver类。参考教程主要是《Python核心编程》。 首先&#xff0c;客户端/服务器模型&#xff0c;客户端向服务器发送请求&#xff0c;在请求合理的情况下&#xff0c;服务器返回客户端需要的资源&#xff0c;…

程序员面试金典 - 面试题 16.17. 连续数列(DP/分治)

1. 题目 给定一个整数数组&#xff08;有正数有负数&#xff09;&#xff0c;找出总和最大的连续数列&#xff0c;并返回总和。 示例&#xff1a; 输入&#xff1a; [-2,1,-3,4,-1,2,1,-5,4] 输出&#xff1a; 6 解释&#xff1a; 连续子数组 [4,-1,2,1] 的和最大&#xff0c…

视觉能力提升112%!李飞飞团队让AI进入社会,学会了“骗”标注…

作者 | 李梅编辑 | 陈彩娴来源 | AI科技评论人类从与他人的互动中学习&#xff0c;而目前的人工智能却常常只能在与社会隔离的环境中学习。所以当我们把一个智能体放到真实世界中时&#xff0c;它会不可避免地在遇到大量新的数据&#xff0c;无法应对不断变化的新需求。如何将智…

.Net 1.1下WEB引用Win控件的两个Bug

1.WEB系统引用windows控件的方式来实现页面打印的功能&#xff0c;一直使用比较正常&#xff0c;有一天更新后部分机器不能正常加载控件。后来分析的N久&#xff0c;发现是打印控件上我加了一个Label&#xff0c;使用了Arial Black字体&#xff0c;如果客户的机器上没有这种字体…

程序员面试金典 - 面试题 16.11. 跳水板(数学)

1. 题目 你正在使用一堆木板建造跳水板。 有两种类型的木板&#xff0c;其中长度较短的木板长度为shorter&#xff0c;长度较长的木板长度为longer。 你必须正好使用 k 块木板。编写一个方法&#xff0c;生成跳水板所有可能的长度。 返回的长度需要从小到大排列。 示例&…

信息抽取终于实现了大一统~

2022年了&#xff0c;有人说信息抽取领域早已是诸神黄昏。然而即使这样&#xff0c;依然“内卷”不止。似乎这个卷成麻花的领域已经看不到希望&#xff1f;但是不久前&#xff0c;这个沉寂之地忽然翻起了浪花&#xff0c;一篇发表在ACL2022上的工作&#xff0c;昭示着这个领域终…

python的输出函数_Python

Python print() 函数 描述 print() 方法用于打印输出&#xff0c;最常见的一个函数。 在 Python3.3 版增加了 flush 关键字参数。 print 在 Python3.x 是一个函数&#xff0c;但在 Python2.x 版本不是一个函数&#xff0c;只是一个关键字。 语法 以下是 print() 方法的语法: pr…