涂色-【BFS】
涂色
有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 0 到 65535 之间。给你一个坐标 (sr, sc) 表示图像渲染开始的像素值(行 ,列)和一个新的颜色值 newColor,让你重新上色这幅图像。为了完成上色工作,从初始坐标开始,记录初始坐标的上下左右四个方向上像素值与初始坐标相同的相连像素点,接着再记录这四个方向上符合条件的像素点与他们对应四个方向上像素值与初始坐标相同的相连像素点,……,重复该过程。将所有有记录的像素点的颜色值改为新的颜色值。最后返回经过上色渲染后的图像。
示例 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]内。
思路:对(sr,sc)点进行bfs即可
#include <iostream>
#include <math.h>
#include <queue>
#include <string.h>
using namespace std;
// 方向数组 上右下左
int dx[4] = {-1, 0, 1, 0};
int dy[4] = {0, 1, 0, -1};
// 地图
int nums[55][55];
// 是否访问过 0代表没访问过,1代表访问过
int vis[55][55];
// 地图长度
int n;
int sr, sc, newColor;
bool check(int x, int y)
{
return x >= 0 && y >= 0 && x < n && y < n && vis[x][y] == 0 && nums[x][y] == nums[sr][sc];
}
void bfs(int x, int y)
{
// res[x][y] = 0;
queue<pair<int, int>> q;
memset(vis, 0, sizeof(vis));
vis[x][y] = 1; //设置(x,y)访问过
q.push({x, y});
while (!q.empty())
{
// len++;
pair<int, int> t = q.front();
q.pop();
for (int i = 0; i < 4; i++)
{
int newx = t.first + dx[i];
int newy = t.second + dy[i];
if (check(newx, newy))
{
// 将新点标记访问过
vis[newx][newy] = 1;
// 更新该点的像素值
nums[newx][newy] = newColor;
q.push({newx, newy});
}
}
}
}
int main()
{
cin >> n;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
cin >> nums[i][j];
cin >> sr >> sc >> newColor;
bfs(sr, sc);
nums[sr][sc] = newColor;
cout << endl;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
cout << nums[i][j] << " ";
cout << endl;
}
return 0;
}
涂色-【BFS】的更多相关文章
- 1260: [CQOI2007]涂色paint
Description 假设你有一条长度为5的木版,初始时没有涂过任何颜色.你希望把它的5个单位长度分别涂上红.绿.蓝.绿.红色,用一个长度为5的字符串表示这个目标:RGBGR. 每次你可以把一段连续 ...
- 【BZOJ-1260】涂色paint 区间DP
1260: [CQOI2007]涂色paint Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 1147 Solved: 698[Submit][Sta ...
- 并查集(涂色问题) HDOJ 4056 Draw a Mess
题目传送门 题意:给出一个200 * 50000的像素点矩阵,执行50000次操作,每次把一个矩形/圆形/菱形/三角形内的像素点涂成指定颜色,问最后每种颜色的数量. 分析:乍一看,很像用线段树成段更新 ...
- hdu 4559 涂色游戏(对SG函数的深入理解,推导打SG表)
提议分析: 1 <= N <= 4747 很明显应该不会有规律的,打表发现真没有 按题意应该分成两种情况考虑,然后求其异或(SG函数性质) (1)找出单独的一个(一列中只有一个) (2)找 ...
- 【DP】BZOJ 1260: [CQOI2007]涂色paint
1260: [CQOI2007]涂色paint Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 893 Solved: 540[Submit][Stat ...
- BZOJ2375: 疯狂的涂色
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2375 小t非常喜爱画画,但是他还是一个初学者.他最近费尽千辛万苦才拜到已仙逝的达 芬奇为师(神 ...
- BZOJ 1260: [CQOI2007]涂色paint( 区间dp )
区间dp.. dp( l , r ) 表示让 [ l , r ] 这个区间都变成目标颜色的最少涂色次数. 考虑转移 : l == r 则 dp( l , r ) = 1 ( 显然 ) s[ l ] = ...
- [Sdoi2017]树点涂色 [lct 线段树]
[Sdoi2017]树点涂色 题意:一棵有根树,支持x到根染成新颜色,求x到y颜色数,求x子树里点到根颜色数最大值 考场发现这个信息是可减的,但是没想到lct 特意设计成lct的形式! 如何求颜色数? ...
- BZOJ_1260_[CQOI2007]涂色paint _区间DP
BZOJ_1260_[CQOI2007]涂色paint _区间DP 题意: 假设你有一条长度为5的木版,初始时没有涂过任何颜色.你希望把它的5个单位长度分别涂上红.绿.蓝.绿.红色,用一个长度为5的字 ...
- BZOJ 1260:[CQOI2007]涂色paint
(⊙o⊙)-,常规课考试又炸了!目测此次我要完蛋了... 又玩脱了,考数学的时候装B装大了! 算了,先进入正题... 题目描述:Description假设你有一条长度为5的木版,初始时没有涂过任何颜色 ...
随机推荐
- Codeforces Round 799 (Div. 4)G. 2^Sort
暴力枚举每一个端点然后去check 显然是复杂度为\(O(n^2)\)是来不及的. 我们考虑大区间满足小区间一定满足,用两个指针维护一下当前满足不等式的区间,然后长度达到就计算答案. 思路很简单,主要 ...
- Java基础全程复习笔记(值得参考)
Java基础复习笔记 第01章:Java语言概述 1. Java基础学习的章节划分 第1阶段:Java基本语法 Java语言概述.Java的变量与进制.运算符.流程控制语句(条件判断.循环结构).br ...
- AHandler AMessage ALooper消息机制-源码6.0.0以上
AHandler AMessage ALooper消息机制 AHandler是Android native层实现的一个异步消息机制,在这个机制中所有的处理都是异步的,将变量封装到一个消息AMessag ...
- isPrimitive()方法和包装类
java.lang.Class.isprimitive()是说:确定指定的Class对象是基本类型,其返回是个boolean值,true代表你指定的这个Class对象是基本类型,false代表这个Cl ...
- 详解SSL证书系列(5)SSL证书为什么不能好多年签一次呢
上一篇介绍了详解SSL证书系列(4)免费的SSL证书和收费的证书有什么区别,这一篇我们继续了解一下我们申请的SSL证书为什么不能好多年签一次呢,这样不是更省事吗? SSL证书最多只能签发一年,一年到期 ...
- Three.js的基础使用
1. 引言 Three.js是著名的JavaScript 3D图形库,用于浏览器中开发 3D 交互场景的 JS 引擎,可以快速的搭建三维场景 Three.js官网为:创建一个场景 – three.js ...
- 用Vue3.0 写过组件吗?如果想实现一个 Modal你会怎么设计?
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.组件设计 组件就是把图形.非图形的各种逻辑均抽象为一个统一的概念(组件)来实现开发的模式 现在有一个场景,点击新增与编辑都弹框出来进行 ...
- 原型&继承题目及内容解答
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 1. 代码输出结果 function Person(name) { this.name = name } var p2 = new Per ...
- Jmeter教程-前言
前言 为什么要撰写这样一个教程呢? 深入学习Jmeter 温故而知新,通过编写教程,我将更深入地学习JMeter.尽管我已经使用JMeter很长时间,但还有许多元件我并不十分了解.为了创作一个详尽且实 ...
- SpringBoot项目 填充Excel模板 导出 下载
模板 下载后的效果 项目结构 pom <?xml version="1.0" encoding="UTF-8"?> <project xmln ...