四分树 (Quadtrees UVA - 297)

题目描述:

原题:https://vjudge.net/problem/UVA-297

题目思路:

1.依旧是一波DFS建树 //矩阵实现

2.建树过程用1.0来填充表示像素

 1 #include <iostream>
 2 #include <cstring>
 3 using namespace std;
 4
 5 const int maxn = 1024 + 5;
 6 const int len = 32 ;
 7 int tree[len][len],pcount;
 8 char str[maxn];
 9
10 void buildtree(char* str,int& pos,int r,int c,int w)//用矩阵来实现四分树
11 {
12     char ch = str[pos++] ;
13     if(ch == ‘p‘)
14     {
15         buildtree(str, pos, r,     c+w/2, w/2); // 这个树的第一个结点
16         buildtree(str, pos, r,     c    , w/2); // 2
17         buildtree(str, pos, r+w/2, c    , w/2); // 3
18         buildtree(str, pos, r+w/2, c+w/2, w/2); // 4
19     }
20     else if(ch == ‘f‘) //填像素并统计 ==0说明没填过
21     {
22         for(int i = r; i < r+w; i++)
23               for(int j = c; j < c+w; j++)
24                    if(tree[i][j] == 0) { tree[i][j] = 1; pcount++; }
25     }
26 }
27
28 int main(int argc, char *argv[])
29 {
30     int t ;
31     cin >> t;
32     while(t--)
33     {
34         memset(tree,0,sizeof(tree)) ;
35         pcount = 0 ;
36         for(int i = 0;i < 2; i++)
37         {
38             cin >> str ;
39             int pos = 0;
40             buildtree(str,pos,0,0,len) ;
41         }
42         cout << "There are "<< pcount <<" black pixels." << endl ;
43     }
44     return 0;
45 }

原文地址:https://www.cnblogs.com/secoding/p/9535783.html

时间: 2024-08-28 01:31:14

四分树 (Quadtrees UVA - 297)的相关文章

四分树(Quadtrees)

[本博文非博主原创,思路与题目均摘自 刘汝佳<算法竞赛与入门经典(第2版)>] 四分树Quadtrees 一幅图有1024个点, 可以对图平均分成4块, 并且子图也可以再往下分, 直到一个子图表示一个点. f表示这块子图填满, p表示它还有4个子图, e表示没有子图(当然啦, 它也没有填满). 给定两个字符串(其实就是两幅图, 两棵树), 求把两图合并后的图的黑点数. Example Input 3 ppeeefpffeefe pefepeefe peeef peefe peeef peepe

Quadtrees UVA 297

说说: 先来说说题意,题目给定了一个32*32大小(相当于1024个1*1的小正方形合成)的正方形,如下图所示: 其实每个大正方形可以看成一个树根,它由四个小正方形组成,四个小正方形为孩子.当然,我们可以立即给小正方形上色,黑色或白色,还可以把小正方形再细分成更小的四个正方形,直至正方形的大小为1*1为止.现在题目给你两个字符串,例如: ppeeefpffeefe pefepeefe 其中p表示该节点不是叶子节点,e表示为白色的叶子节点,f为黑色的叶子节点.整个字符串是先序遍历的结果.要求求出两

UVa 297 Quadtrees(四分树)

题意  可以用一个四分图表示一32*32的黑白图像   求两个四分树对应图像相加所得图形黑色部分有多少像素 直接用一个32*32的矩阵表示图  黑色为非0白色为0  递归建图   最后有多少个非零就是答案了 #include<cstdio> #include<cstring> using namespace std; const int L = 32, N = 1050; char s[N]; int ans[L][L], cnt; void draw(char *s, int &

UVa 297.Quadtrees【非二叉树之四分树】【7月31】

Quadtrees A quadtree is a representation format used to encode images. The fundamental idea behind the quadtree is that any image can be split into four quadrants. Each quadrant may again be split in four sub quadrants, etc. In the quadtree, the imag

UVA - 297 Quadtrees (四分树)

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

Uva 297 四分树

题意: 有一个大小为32*32的图像, 它可以描述为一颗四分树, 如下图 注意描述顺序为 2 1 3 4 给出两棵四分树的先序遍历, 求两者合并后, 黑色像素的个数. 分析: 因为本题给的树是一颗完全的树, 所以只需要给出先序遍历, 就能确定整棵树. 我们可以建一个32*32的数组模拟涂色的过程, 是一个锻炼递归的好题目, 递归的代码通常也可以写的很简便. 每次确定一个左上角坐标(r,c), 和长度len,就可以把一个矩形区域填充. 最后数一下填充多少个即可. #include <bits/st

UVa 806 四分树

题意: 分析: 类似UVa 297, 模拟四分树四分的过程, 就是记录一个左上角, 记录宽度wideth, 然后每次w/2这样递归下去. 注意全黑是输出0, 不是输出1234. 1 #include <bits/stdc++.h> 2 using namespace std; 3 // 1 2 4 // 3 4 5 const int base5[8] = {1,5,25,125,625,3125,15625,78125}; 6 int n; 7 string G[70]; 8 vector&

UVA 297 Quadtrees(四叉树建树、合并与遍历)

<span style="font-size: 18pt; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">K - </span><span style="color: blue; font-size: 18pt; font-family: Arial, Helvetica, sans-serif; background-color

uva 297 - Quadtrees

 Quadtrees  A quadtree is a representation format used to encode images. The fundamental idea behind the quadtree is that any image can be split into four quadrants. Each quadrant may again be split in four sub quadrants, etc. In the quadtree, the im