Uva297 Quadtrees【递归建四分树】【例题6-11】
白书 例题6-11
用四分树来表示一个黑白图像:最大的图为根,然后按照图中的方式编号,从左到右对应4个子结点。如果某子结点对应的区域全黑或者全白,则直接用一个黑结点或者白结点表示;如果既有黑又有白,则用一个灰结点表示,并且为这个区域递归建树。
思路
用一个buffer表示黑白表格,利用递归建树,每当遇见p(灰色)就往下递归四个节点,遇到f(黑色)就把buf[][]
对应的位置设为1
cuf++,找对应的位置
是个难点.需要遍历(r,r+w)(c,c+w)r,c是buf的下标,从左上角开始,w是格子的大小,初始为总len=32,每递归一层,除2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
#include
"cstdio"
#include
"cstring"
#include
"iostream"
#include
"cmath"
#include
"cstring"
#include
"cstring"
#include
"cstdio"
#pragma
warning(disable:4996)
const
int len = 32;//边长
const
int maxn = 1024 + 10;
char
s[maxn];
int
buf[len][len], cnt;//指针
//
s是读入的字符串序列,p当前正在读的字符串的下标,r是纵坐标,c是横坐标,w是当前块的大小,从len开始,深度+1,w/=2.
void
draw(const char* s, int& p, int r, int c, int w) {
char
ch = s[p++];
if
(ch == 'p') {//灰色,读取子树
draw(s,
p, r, c + w / 2, w / 2); //块1
draw(s,
p, r, c, w / 2); //块2
draw(s,
p, r + w / 2, c, w / 2); //块3
draw(s,
p, r + w / 2, c + w / 2, w / 2);//块4
}
else
if (ch == 'f') {//黑色
for
(int i = r; i < r + w; i++) {
for
(int j = c; j < c + w; j++) {
if
(buf[i][j] == 0) {
buf[i][j]
= 1;
cnt++;//黑块计数
}
}
}
}
}
int
main() {
int
T;
scanf("%d",
&T);
while
(T--) {
memset(buf,
0, sizeof(buf));
cnt
= 0;
for
(int i = 0; i < 2; i++) {//读取两棵树,操作同一个buf,达到合并的目的
scanf("%s",
s);
int
p = 0;
draw(s,
p, 0, 0, len);
}
printf("%d",
cnt);
}
return
0;
}
|
Uva297 Quadtrees【递归建四分树】【例题6-11】的更多相关文章
- UVA.297 Quadtrees (四分树 DFS)
UVA.297 Quadtrees (四分树 DFS) 题意分析 将一个正方形像素分成4个小的正方形,接着根据字符序列来判断是否继续分成小的正方形表示像素块.字符表示规则是: p表示这个像素块继续分解 ...
- UVA806-Spatial Structures(四分树)
Problem UVA806-Spatial Structures Accept:329 Submit:2778 Time Limit: 3000 mSec Problem Description ...
- UVa 297 (四分树 递归) Quadtrees
题意: 有一个32×32像素的黑白图片,用四分树来表示.树的四个节点从左到右分别对应右上.左上.左下.右下的四个小正方区域.然后用递归的形式给出一个字符串代表一个图像,f(full)代表该节点是黑色的 ...
- 树--四分树(UVa297)
郑重声明: 数据结构这部分内容, 由于博主才学很少(且很浅)的内容, 所以现在所写的(大都是抄的)一些典型例题, 再加上一些自己想法和理解而已, 等博主勤加修炼, 以后会大有补充和改进. 粗浅之处, ...
- [C++]四分树(Quadtrees)
[本博文非博主原创,思路与题目均摘自 刘汝佳<算法竞赛与入门经典(第2版)>] 四分树Quadtrees 一幅图有1024个点, 可以对图平均分成4块, 并且子图也可以再往下分, 直到一个 ...
- 四分树 (Quadtrees UVA - 297)
题目描述: 原题:https://vjudge.net/problem/UVA-297 题目思路: 1.依旧是一波DFS建树 //矩阵实现 2.建树过程用1.0来填充表示像素 #include < ...
- UVA - 297 Quadtrees (四分树)
题意:求两棵四分树合并之后黑色像素的个数. 分析:边建树边统计. #include<cstdio> #include<cstring> #include<cstdlib& ...
- [NOI2019]弹跳(KD-Tree/四分树/线段树套平衡树 优化建图+Dijkstra)
本题可以用的方法很多,除去以下三种我所知道的就还有至少三种. 方法一:类似线段树优化建图,将一个平面等分成四份(若只有一行或一列则等分成两份),然后跑Dijkstra即可.建树是$O(n\log n) ...
- UVa297 Quadtrees
// UVa297 Quadtrees // 题意:给两棵四分树的先序遍历,求二者合并之后(黑色部分合并)黑色像素的个数.p表示中间结点,f表示黑色(full),e表示白色(empty) // 算法: ...
随机推荐
- [ovs] openvswitch 入门
https://www.sdnlab.com/sdn-guide/14747.html http://sdnhub.cn/index.php/openv-switch-full-guide/ http ...
- [daily][editer] 二进制编辑工具 hyx
用了众多之后,终于发现了一个好用的二进制编辑工具: hyx https://yx7.cc/code/ https://en.wikipedia.org/wiki/Comparison_of_hex_e ...
- 内部排序->插入排序->其它插入排序->表插入排序
文字描述 和之前的插入排序比,表插入排序可以保证排序过程中不移动记录:因此表插入排序所用的存储结构和之前的顺序存储不同,表插入排序采用静态链表类型作为待排记录序列的存储结构,设数组中下标0的分量为表头 ...
- Python开发【模块】:aiohttp(一)
AIOHTTP 用于asyncio和Python的异步HTTP客户端/服务器 主要特点: 支持客户端和HTTP服务器. 支持服务器WebSockets和 客户端WebSockets开箱即用,没有回调地 ...
- oracle中in和exists的区别
IN适合于外表大而内表小的情况:EXISTS适合于外表小而内表大的情况. 性能上的比较 比如Select * from T1 where x in ( select y from T2 ) 执行的过程 ...
- 10.5-uC/OS-III内部任务(时基任务OS-TickTask())
几乎所有的实时系统都需要有一个能提供周期性时间的时间源,叫做时基周期或系统周期. uC/OS-III的时基周期处理程序封装在OS_TICK.C文件中. OS_TickTask()任务被uC/OS-II ...
- Linux中程序开机自启
Linux中程序开机自启 https://www.itbulu.com/debian-ubuntu-rclocal.html
- 关于mobilesroll使用方法的再次声明
js $('#name').click(function(valueText) { $('#demo').mobiscroll('show'); // return false; }); $(&quo ...
- Too many connections解决方法
在工作中,大家或许常常遇到Too many connections这个错误,这时作为DBA想进数据库管理都进不去,是非常尴尬的一件事情.当然有同学说可以修改配置文件,但是修改配置文件是需要重启mysq ...
- 前端 HTML body标签相关内容 常用标签 定义列表<dl>
定义列表<dl> 定义列表的作用非常大. <dl>英文单词:definition list,没有属性.dl的子元素只能是dt和dd. <dt>:definition ...