【代码超详解】UVA 297 Quadtrees 四分树

MATLAB中实现四分树图像分割算法 在MATLAB中实现四分树构建的第一步是导入图像,并定义适合的数据结构来存储图像信息。图像导入通常使用MATLAB内置函数imread,该函数能够读取不同格式的图像文件,并将其转换为MATLAB能够处理的矩阵形式。% 图像导入% 定义四分树节点结构体} TreeNode;在上述代码中,pixel_t是一个自定义类型,用于存储图像中的单个像素值。结构体TreeNode代表四分树的节点,包含一个像素值color和四个指向其子节点的指针。如果节点是叶子节点,则这些指针为NULL。 阅读详情

一、题目描述

四分树是一种编码图像的算法。任意一个图像都可以被划分成四个象限,如果这四个象限仍然有像素的颜色不同,就把这个象限再划分成四个象限,直到象限只是单个点或者全部像素点的颜色都相同为止。
首先输入一个数字,代表测试用例的数量。在这若干个样例中,每个样例占一行,用于描述四分树。每一行的每个字符只能是 p、f、e 三个中的一个。p代表该节点为父节点,接下来输入其子节点。f 代表该节点要被涂成黑色,e 代表该节点留白。
现在有一个计算机艺术家正在创作一幅 32 × 32 像素的黑白图像。制图步骤如下:给两张 32 × 32 的黑白图,并将两个图像叠加。如果两张图对应的像素点有一个是黑色,那么合成后的图像对应的像素点也是黑色;否则合成结果的这个对应像素是白色。
对每一个测试用例,输出最终图像含有黑色像素的数目,格式是:
There are X black pixels.
X 代表统计出的最终图像含有的黑色像素的数量。
样例说明:
ppeeefpffeefe
pefepeefe

第一幅图:
第一个 p :读取第一层子区域,范围为第一章图的右上角的四个小方块拼起来的一个大方块,长度为 16 。也就是说,区域是 (0,16) ,(0,31),(16,16),(16,31)围成的正方形。
第二个 p :读取第二层子区域,范围是 (0,24),(0,31),(8,24),(8,31)围成的正方形,边长为 8 。
eeef :设上一步的区域为 D ,D 及其左侧、左下方、下方的三个等大的正方形区域的颜色分别为白、白、白、黑。第二层子区域的第一个节点的子节点绘制完毕。
p :读取第一层子区域的第二个节点。
ffee :该节点的四个象限的颜色分别为黑、黑、白、白。
fe :读取第一层子节点的第三、第四个节点并绘制。
第二幅图:
p :读取第一层子区域。
efe :第一层子区域的第一、二、三节点的颜色分别为白、黑、白。
p:从第一层的第四子节点读取第二层的区域。
eefe :该节点的四个子区域的颜色分别为白、白、黑、白。
第一个测试样例读取并绘制完毕。

二、算法分析说明与代码编写指导

准备一个字节数组 bitset<32> px[32] 用于储存合成后的结果。
采用递归输入的方式。编写一个渲染图像的函数,当读到字符 p 时调用四次该函数分别渲染四个象限。如果读到字符 f,并且该像素点是空白,就将其涂黑,黑色像素点的数量 n 要增加 1。如果读到字符 e,跳过。
写主程序时,需要注意一个测试案例要读取两个图像。读取第二张图的描述字符时,需要将当前字符位置 p 归位,而读取完该样例以后,才清空黑像素的数量 n ,并清除合成图像。

三、AC 代码(0 ms)

#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<bitset>
#pragma warning(disable:4996)
using namespace std;
const unsigned short pInit = 65535; unsigned int tc; bitset<32> px[32]; char descr[pInit]; unsigned short p, n;
inline void RenderImage(const char* descr, const unsigned short& pos, const unsigned char& row, const unsigned char& column, const unsigned char& len) {
	switch (descr[++p]) {
	case 'p':
		RenderImage(descr, p, row, column + len / 2, len / 2); RenderImage(descr, p, row, column, len / 2);
		RenderImage(descr, p, row + len / 2, column, len / 2); RenderImage(descr, p, row + len / 2, column + len / 2, len / 2); break;
	case 'f':
		unsigned char rowEnd = row + len, columnEnd = column + len;
		for (unsigned char i = row; i < rowEnd; ++i)
			for (unsigned char j = column; j < columnEnd; ++j)
				if (px[i][j] == 0) { px[i][j] = 1; ++n;  }
	}
}
int main() {
	scanf("%u", &tc); ++tc;
	while (--tc) {
		n = 0; p = pInit;
		for (unsigned char i = 0; i < 32; ++i)px[i].reset();
		scanf("%s", descr); RenderImage(descr, p, 0, 0, 32); p = pInit; scanf("%s", descr); RenderImage(descr, p, 0, 0, 32);
		printf("There are %hu black pixels.\n", n);
	}
	//system("pause");
	return 0;
}
四分树切割算法MATLAB代码 数字图像处理常用分割算法:四分树切割算法。从main.m函数文件中进入,运行程序。祥见readme_rgbquadtree.txt 立即下载

相关推荐

Unity游戏开发实战:用Flow Field实现RTS百人军团流畅寻路(附完整代码)

本文深入探讨了在Unity中利用流场寻路技术解决RTS游戏大规模单位移动性能瓶颈的实战方案。通过解析从Dijkstra算法生成成本场、积分场到最终向量场的核心原理,并结合分块、缓存及与DOTS/ECS架构集成的优化策略,实现了百人军团的流畅群体寻路。文章提供了完整的代码示例,助力开发者构建高性能的RTS寻路系统。

weixin_28363123的博客 587

四分树 Quadtrees UVa 297

题述 如图所示,可用四分树来表示一个黑白图像,方法是用根节点表示整幅图像,然后把行列各分成两等份,按照图中的方式编号,从左到右对应4个子结点。如果某子结点对应的全黑或者全白,则直接用一个黑结点或者白结点表示;如果既有黑又有白,则用一个灰结点表示,并且为这个区域递归建树。给出两颗四分树的先序遍历,求二者合并之后(黑色部分合并)黑色像素的个数。p表示中间节点,f表示黑色(full),e表示白色(emp...

qq_43749262的博客 356

RIGOL DS1102E示波器新手必看:从开机到捕获第一个波形的5分钟指南

本文为RIGOL DS1102E示波器新手提供了一份快速上手指南。内容涵盖从开机、探头校准到捕获第一个波形的完整流程,重点解析了触发设置、自动测量等核心操作,并指出了探头衰减比设置等常见误区,帮助用户快速掌握这款经典数字示波器的基本使用方法。

dream的博客 740

四分树( Quadtrees, UVa 297)

如图6-8所示, 可以用四分树来表示一个黑白图像, 方法是用根结点表示整幅图像, 然后把行列各分成两等分, 按照图中的方式编号, 从左到右对应4个子结点。 如果某子结点对应的区域全黑或者全白, 则直接用一个黑结点或者白结点表示; 如果既有黑又有白, 则用一个灰结点表示, 并且为这个区域递归建树。 给出两棵四分树的先序遍历, 求二者合并之后( 黑色部分合并) 黑色像素的个数。 p表示中间结点, f...

千年暗室,一灯即明 816

从赛题到实战:一份面向高职“区块链技术应用”赛项的食品溯源系统全栈部署与运维指南

本文为高职院校学生备战“区块链技术应用”技能大赛提供了一份详实的食品溯源系统全栈部署与运维指南。内容涵盖从理解赛题业务逻辑、绘制技术蓝图,到搭建4节点FISCO BCOS联盟链、部署管理平台与智能合约,再到核心运维技能与前后端联调测试的完整流程,旨在帮助参赛者将赛题转化为可运行的实战项目,全面提升区块链全栈开发与运维能力。

weixin_29172201的博客 686

基于YOLOX与LPRNet的车牌检测与识别系统(Python+UI界面)实战指南

本文详细介绍了如何利用YOLOX目标检测模型与LPRNet车牌识别模型,从零构建一个完整的车牌检测与识别系统。通过解析CCPD数据集、训练深度学习模型,并最终集成到PyQt5开发的图形化UI界面中,提供了一个从数据处理到应用部署的完整实战指南,帮助开发者快速掌握智能交通系统中的关键技术。

weixin_29230901的博客 341

zoj1788——四分树---2022年4月18日

** Quad Trees ** Time Limit: 2000 msMemory Limit: 65536 KB A binary image, such as the one shown in Figure 2(a), is usually represented as an array of binary entries, i.e., each entry of the array has value 0 or 1. Figure 2(b) shows the array that represen

m0_51265528的博客 385

如何在INCA中修改标定量的初始值,并刷回控制器

测试过程中,有些时候,标定量来不及修改,这就需要修改标定量的初始值了,又不想打开模型重新编译,因此直接在INCA中修改,然后再刷回控制器,就成了最佳选择,之前也学过,长时间不用,忘记怎么搞了,最近又用到了,这次记录一下,以后用到的时候,就不用在网上东翻西找了。截止到2023年11月24日,共找到了两种方法可以实现修改。

weixin_43406519的博客 4200

算法竞赛入门经典 四分树

#include #include const int len = 32; const int maxn = 1024 + 10; char s[maxn]; int buf[len][len], cnt; //把字符串s[p]导出到 以(r,c)为左上角,边长为w的缓存区里 //r,c默认为0,0;W默认为32 void draw(const char* s, int& p, int r,

Clannad 667

Test-Time Adaptation Induces Stronger Accuracy and Agreement-on-the-Line

TTA不管是否提高了OOD的泛化性都增强了线性的趋势,TTA的初始目的是为了增强OOD的表现,一个人可能会觉得TTA使得ACL更强的原因是他消除了ID和OOD之间的差距,因此所有模型间ID vs OOD的准确率接近于y=x这条线,但是实际上这个解释不能够反映我们的经验发现,因为虽然TTA将分布之间的偏移简化为一种放缩的分布,但是这个放缩的因子幅值可能很大,也就是α<<1但是r>>1,这就会导致很偏离y=x这条线,而且理论分析也是,虽然ID和OOD的差距很大,但是线性关系还在。

m0_62673638的博客 148

YOLOv8改进:基于EfficientNetV2均衡缩放网络的特征提取层优化【YOLOv8】

YOLO(You Only Look Once)系列模型以其高效的实时目标检测能力而闻名。YOLOv8作为该系列的最新版本,通过引入改进的网络结构和算法优化,进一步提升了目标检测的性能。然而,YOLOv8在特征提取阶段的网络结构仍有改进的空间。EfficientNetV2是一种基于均衡缩放的卷积神经网络,它通过优化网络的宽度、深度和分辨率来实现高效的特征提取。与之前的EfficientNet版本相比,EfficientNetV2在速度和精度上都有显著提升,尤其在处理复杂目标检测任务时表现尤为突出。

博客 1582

非二叉树 UVA297 四分树 Quadtrees

UVA297 四分树 Quadtrees 题意翻译 如图所示,可以用四分图来表示一个黑白图像,方法是用根节点表示整幅图像,然后把行列个分成两等份,按图中的方式编号,从左到右对应4个子节点。如果某子节点对应的区域全黑或全白,则直接用一个黑节点或白节点表示;如既有黑又有白,则用一个灰节点表示,并且为这个区域递归建树。 给出两棵四分树的先序遍历,求二者合并(黑色部分合并)黑像素的个数(每幅图都是32X...

繁凡さん的博客 1088

GibbsCAM软件二次开发:GibbsCAM软件API接口详解

API(Application Programming Interface,应用程序编程接口)是一种允许不同软件之间进行通信的接口。在GibbsCAM软件中,API提供了与外部程序交互的能力,使得开发者可以利用GibbsCAM的强大功能进行二次开发,定制化满足特定的制造需求。GibbsCAM的API主要基于.NET框架,使用C#或VB.NET等语言进行编程。在GibbsCAM软件中,通过API接口创建自定义几何形状是实现复杂零件设计和加工策略定制的关键步骤。

kkchenjj的博客 1497

UVA297 四分树 Quadtrees 题解

题目链接: https://www.luogu.org/problemnew/show/UVA297 附几道推荐题目(先完成再食用此题效果更佳) https://www.luogu.org/problemnew/show/UVA122 https://www.luogu.org/problemnew/show/UVA699 https://www.luogu.org/problemnew/show...

ShineEternal的笔记小屋 407

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

UVa297 (四分树 Quadtrees)

1、题目大意 题目链接UVa 297 给出结点值为 p, e, f 的两个严格四叉树(非叶结点的度为 4)的先序遍历序列,p 代表灰色,e 代表白色,f 代表黑色,将两个树对应的结点颜色相融合,求最终黑结点代表的像素个数。其中根结点代表像素数为1024个,其余每个结点代表的像素数为上一层结点的四分之一。 2、解题思路 根据先序序列就可以确定这个四叉树。因为本题中,严格四叉树的结点个数为 4n...

Armstrong的博客 459

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

UVA297 · 四分树(Quadtrees)

题面描述: 给两棵四分树的先序遍历,求二者合并之后(黑色部分合并)黑色像素的个数。p表示灰色,f表示黑色(full),e表示白色(empty) 样例输入: 3 ppeeefpffeefe pefepeefe peeef peefe peeef peepefefe 样例输出: There are 640 black pixels. There are 512 black pix...

Kig7z8op的小屋 280

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

UVA.297 Quadtrees (四分树 DFS)

UVA.297 Quadtrees (四分树 DFS)题意分析将一个正方形像素分成4个小的正方形,接着根据字符序列来判断是否继续分成小的正方形表示像素块。字符表示规则是: p表示这个像素块继续分解,e表示当前方格没有像素,即为空,f表示当前像素块为满,黑色。 最后求解两个数合并后的像素块的数量是多少。 最大的像素块数量是1024个。采用数组模拟,根据所给的字符串,递归建树。字符数组的建四分树的

Pengwill's Blog 817

UVa 297 四分树 (Quadtrees)

可以用四分树来表示一个黑白图像,方法是用根节点表示整幅图像,然后把行列各分成两等份,按图中的方式编号,从左到右对应4个子节点。如果某子节点对应的区域全黑或者全白,则直接用一个黑节点或者白节点表示。如果既有黑节点又有白节点,就用一个灰节点表示,并为这个区域递归建树。 要点: 递归建树 至于题目为什么说只序先序遍历就能确定整个树,其实并非四分树都可以这样,而是这道题的四分树比较特殊,每个非叶子节点...

Inuyasha__的博客 328

例题6-11 四分树(Quadtrees,UVa 297)

原题链接:https://vjudge.net/problem/UVA-297 题意:将32X32的像素格以四分树的形式加密表示,要求根据给出的两个像素图得出合并后像素图的黑色块的数量。 反思:可能是受前面例题的影响,就是想用递归建树,实现单一的四分树很好办,但是重叠部分就难搞了,想着用数组来表示四分树的不同层,但发现也不好使。结果32X32的像素格原来才是突破点,想一想图一般可以用数组、矩阵这样...

TK_wang_的博客 293

Uva297 Quadtrees【递归建四分树】【例题6-11】

递归建树,利用引用移动下标

GuoZLH的博客 1728

UVA - 297 Quadtrees (四分树)

题意:求两棵四分树合并之后黑色像素的个数。 分析:边建树边统计。 #include<cstdio> #include<cstring> #include<cstdlib> #include<cctype> #include<cmath> #include<iostream> #include&...

Cherrychan2014的博客 196

UVA297 四分树 Quadtrees

四分图来表示一个黑白图像,方法是用根节点表示整幅图像,然后把行列个分成两等份,按图中的方式编号,从左到右对应4个子节点。如果某子节点对应的区域全黑或全白,则直接用一个黑节点或白节点表示;如既有黑又有白,则用一个灰节点表示,并且为这个区域递归建树。 给出两棵四分树的先序遍历,求二者合并(黑色部分合并)黑像素的个数(每幅图都是32X32的)。p表示灰节点,f表示黑节点,e表示白节点。

Sx_WWj的博客 218

UVa 297 Quadtrees

#include <cstdio> #include <cstring> #include <iostream>using namespace std;const int len = 32; const int maxn = 1024; char s[maxn]; int buf[len][len], cnt; void draw(const char* s, int &p, int r, int

more time 367
上一篇: 【代码超详解】UVA 699 The Falling Leaves 下落的树叶
下一篇: 【代码超详解】UVA 572 Oil Deposits 油田
山上一缕烟
博客等级 码龄8年 269粉丝 498原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值