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

[本博文非博主原创,思路与题目均摘自 刘汝佳<算法竞赛与入门经典(第2版)>] 四分树Quadtrees 一幅图有1024个点, 可以对图平均分成4块, 并且子图也可以再往下分, 直到一个子图表示一个点. f表示这块子图填满, p表示它还有4个子图, e表示没有子图(当然啦, 它也没有填满). 给定两个字符串(其实就是两幅图, 两棵树), 求把两图合并后的图的黑点数. Example Input 3 ppeeefpffeefe pefepeefe peeef peefe peeef peepe…
题目描述: 原题:https://vjudge.net/problem/UVA-297 题目思路: 1.依旧是一波DFS建树 //矩阵实现 2.建树过程用1.0来填充表示像素 #include <iostream> #include <cstring> using namespace std; + ; ; int tree[len][len],pcount; char str[maxn]; void buildtree(char* str,int& pos,int r,in…
题目链接:https://vjudge.net/problem/UVA-297 题目大意:如上图所示,可以用一个四分树来表示一个黑白图像,方法是用根节点表示整副图像,然后把行列各等分两等分,按照图中的方式进行编号,从左到右对应4个结点 如果某子结点对应的区域全为黑或白,则直接用一个黑结点或者白结点表示:如果既有黑油油白  则用一个灰结点表示  并且为这个区域递归建树. 给出两颗树的现需遍历,求二者合并之后(黑色部分合并)黑色像素的个数.p表示中间结点,f表示黑色   e表示白色 思路:首先一定要…
题意:前序遍历给出两个像素方块.求两个方块叠加后有几个黑色格子. 题解:每次读进来一个方块,就在二维数组上涂色.每次把白色涂黑就cnt++: 具体递归方法是以右上角坐标与边长为参数,每次通过几何规律往下递归一层. 如果当前节点是'p'就继续递归,如果是f,e就说明是叶子结点,e直接返回,f对整个区域涂色. #define _CRT_SECURE_NO_WARNINGS #include "stdio.h" #include<stdio.h> #include<algo…
题目链接: 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/UVA839 分析: 本题为树上的递归题目.我们可以在一个子函数search中完成: void s…
UVA.297 Quadtrees (四分树 DFS) 题意分析 将一个正方形像素分成4个小的正方形,接着根据字符序列来判断是否继续分成小的正方形表示像素块.字符表示规则是: p表示这个像素块继续分解,e表示当前方格没有像素,即为空,f表示当前像素块为满,黑色. 最后求解两个数合并后的像素块的数量是多少. 最大的像素块数量是1024个. 采用数组模拟,根据所给的字符串,递归建树.字符数组的建四分树的技巧是(k << 2) + i i∈[-2,1]. 这样就可以充分利用数组的空间. 两树合并的技…
题意: 有一个32×32像素的黑白图片,用四分树来表示.树的四个节点从左到右分别对应右上.左上.左下.右下的四个小正方区域.然后用递归的形式给出一个字符串代表一个图像,f(full)代表该节点是黑色的,e(empty)代表该节点是白色的,p表示灰色节点,即它还有子节点. 每组数据给出两幅图,求两幅图黑色像素合并以后的黑色像素的个数. 分析: 字符串是递归给出的,那么就递归地处理.遇到字符'p'就递归进去,遇到黑色色的就统计. 递归函数的参数有个是引用,标记读到字符串是哪一位了,简化了程序. #i…
题意:求两棵四分树合并之后黑色像素的个数. 分析:边建树边统计. #include<cstdio> #include<cstring> #include<cstdlib> #include<cctype> #include<cmath> #include<iostream> #include<sstream> #include<iterator> #include<algorithm> #inclu…
Quadtrees 四分树就是一颗一个结点只有4个儿子或者没有儿子的树 [题目链接]UVa 297 Quadtrees [题目类型]树的递归 &题意: 一个图片,像素是32*32,给你两个先序递归的字符串,要你把他俩合起来输出面积.p代表结点,f代表黑色,e代表白色. &题解: 用字符串来模拟buf32*32的数组,递归模拟出模型,黑色的涂成1,白色的不处理(也就是0),最后输出1的个数就好了 &代码: #include <bits/stdc++.h> using na…
题意: 分析: 类似UVa 297, 模拟四分树四分的过程, 就是记录一个左上角, 记录宽度wideth, 然后每次w/2这样递归下去. 注意全黑是输出0, 不是输出1234. #include <bits/stdc++.h> using namespace std; // 1 2 // 3 4 ] = {,,,,,,,}; int n; ]; vector<int> code; int dfs(int r, int c, int w,int num,int dep){ ][] =…