题目链接:https://vjudge.net/problem/UVA-297

题目大意:如上图所示,可以用一个四分树来表示一个黑白图像,方法是用根节点表示整副图像,然后把行列各等分两等分,按照图中的方式进行编号,从左到右对应4个结点

如果某子结点对应的区域全为黑或白,则直接用一个黑结点或者白结点表示:如果既有黑油油白  则用一个灰结点表示  并且为这个区域递归建树。

给出两颗树的现需遍历,求二者合并之后(黑色部分合并)黑色像素的个数。p表示中间结点,f表示黑色   e表示白色

思路:首先一定要把题意读懂。  首先给你一幅图,这幅图的像素的是1024  是正方形区域  你可以看做是32*32的区域   每个块可以看做1 2 3 4个块

问你两棵树合并之后有多少个黑色像素的点。

具体怎么做呢 ?   只要我们能编写一个“画出来”的过程  边画边统计即可!

如果碰到的是p  那么接着画新的区域。  我们可以用一个数组来存储改点是否是黑色  刚开始区域是32*32的大小  我们可以看做起点是(0,0)终点是(31,31)的1024个点

四个区域正如题目要求的一样  一直遍历下去就行了

看代码:

#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
const int len=;
const int maxn=+;
char s[maxn];
int buf[len][len],cnt;
/*
把字符串s[p...]导出到以(r,c)为左上角,边长为w的缓冲区内
*/
//draw(s,p,0,0,len);
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/,w/);//
draw(s,p,r,c,w/);//
draw(s,p,r+w/,c,w/);//
draw(s,p,r+w/,c+w/,w/);//
}
else if(ch=='f')//画黑像素
{
for(int i=r;i<r+w;i++)
{
for(int j=c;j<c+w;j++)
if(buf[i][j]==)
{
buf[i][j]=;
cnt++;
}
}
}
}
int main()
{
int t;
cin>>t;
while(t--)
{
memset(buf,,sizeof(buf));
cnt=;
for(int i=;i<;i++)
{
cin>>s;
int p=;
draw(s,p,,,len);
}
printf("There are %d black pixels.\n",cnt);
}
return ;
}

Quadtrees UVA - 297的更多相关文章

  1. 【紫书】Quadtrees UVA - 297 四叉树涂色

    题意:前序遍历给出两个像素方块.求两个方块叠加后有几个黑色格子. 题解:每次读进来一个方块,就在二维数组上涂色.每次把白色涂黑就cnt++: 具体递归方法是以右上角坐标与边长为参数,每次通过几何规律往 ...

  2. 四分树 (Quadtrees UVA - 297)

    题目描述: 原题:https://vjudge.net/problem/UVA-297 题目思路: 1.依旧是一波DFS建树 //矩阵实现 2.建树过程用1.0来填充表示像素 #include < ...

  3. UVa 297 Quadtrees(树的递归)

    Quadtrees 四分树就是一颗一个结点只有4个儿子或者没有儿子的树 [题目链接]UVa 297 Quadtrees [题目类型]树的递归 &题意: 一个图片,像素是32*32,给你两个先序 ...

  4. UVA.297 Quadtrees (四分树 DFS)

    UVA.297 Quadtrees (四分树 DFS) 题意分析 将一个正方形像素分成4个小的正方形,接着根据字符序列来判断是否继续分成小的正方形表示像素块.字符表示规则是: p表示这个像素块继续分解 ...

  5. uva 297 quadtrees——yhx

    Quadtrees  A quadtree is a representation format used to encode images. The fundamental idea behind ...

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

    <span style="font-size: 18pt; font-family: Arial, Helvetica, sans-serif; background-color: r ...

  7. 297 - Quadtrees (UVa)

    Quadtrees A quadtree is a representation format used to encode images. The fundamental idea behind t ...

  8. UVa 297 Quadtrees -SilverN

    A quadtree is a representation format used to encode images. The fundamental idea behind the quadtre ...

  9. UVa 297 (四分树 递归) Quadtrees

    题意: 有一个32×32像素的黑白图片,用四分树来表示.树的四个节点从左到右分别对应右上.左上.左下.右下的四个小正方区域.然后用递归的形式给出一个字符串代表一个图像,f(full)代表该节点是黑色的 ...

随机推荐

  1. SDUT 3373 数据结构实验之查找一:二叉排序树

    数据结构实验之查找一:二叉排序树 Time Limit: 400MS Memory Limit: 65536KB Submit Statistic Problem Description 对应给定的一 ...

  2. Java接口基础

    接口(interface) 1.接口体中包含常量的声明(没有变量)和抽象方法两部分.接口体中只有抽象方法,没有普通的方法,而且接口体中所有的常量访问权限一定是public,而且是static常量(允许 ...

  3. winform GDI基础(三)实现画笔

    在程序窗口上使用鼠标画图 private Point pStart, pEnd; private bool isAllowDraw = false; private bool isOpenPen = ...

  4. jQuery的选择器+实例

    返回目录 jQuery的冒号选择器 表单  :input :text :password :radio :checkbox :submit :image :reset :button :file :h ...

  5. Unity3D 接口使用

    C#怎么实现多继承? 说起多继承,首先大家可以想想这个问题:你知道在C#中怎么实现多继承吗? 主流的答案无非2种. 答案一:用接口啊,一个类可以继承自多个接口的.答案二:C#不支持多继承,C++才支持 ...

  6. 在OnRowDataBound或OnItemDataBound事件中获取字段值

    不管是在GridView,DataList还是Repeater控件中,其中Repeater控件,没有DataKeyNames或是DataKeyField属性,想获取记录的主键值,只好用Label或是H ...

  7. GitHub下载代码到本地

    1.git  clone git@github.com:Sehunwy/test.git(加粗的是下载的地址) 2.下载完成,此时本地是这样的: 参考:https://blog.csdn.net/qq ...

  8. 【Java】Observer Pattern

    前言 代码来源于生活,更加高于生活.设计模式让我们的生活更加的方便.观测一个东西,盯着一个东西,关注一个公众号,这些东西,如果没有即时通知的话,我们又特别想了解这方面的内容,那么我们除了一直耗着时间找 ...

  9. 【模板】割点(割顶) Tarjan

    题目背景 割点 题目描述 给出一个nnn个点,mmm条边的无向图,求图的割点. 输入输出格式 输入格式: 第一行输入n,mn,mn,m 下面mmm行每行输入x,yx,yx,y表示xxx到yyy有一条边 ...

  10. react 拆分组件于组件

    Todolist.js(这是父组件) import React, { Component,Fragment } from 'react'; import './style.css'; import T ...