uva297(quadtree)
给我们两棵quadtree的前序遍历,要我吗求原来32*32的矩阵有多少个位置是黑的

quardtree是将区域划分为相等的4个子空间,然后再递归划分这4个子空间,知道满足条件后终止划分
这题的终止条件是遇到黑色或者白色的结点停止递归
至于为什么一个前序遍历就能建树,是因为结点颜色的缘故,所以能够知道何时递归返回。所以能够建立一课树
都没什么空敲java代码,反正C++语法都很熟悉了,就用java刷题吧,刷题,学java两不误
 import java.util.Scanner;
 public class Main {
     static Scanner cin = new Scanner(System.in);
     final static int LEN = 32;
     static int ans = 0;
     static String str;
     static int p;
     static int [][] mat = new int [LEN][LEN];
     public static void dfs(int r, int c, int w){//(r,c)是左上角
         char ch = str.charAt(p++);
         if(ch=='p'){
             dfs(r,c+w/2,w/2);//对于图中区域1部分的,
             dfs(r,c,w/2);//对于图中区域2部分的,
             dfs(r+w/2,c,w/2);//对于图中区域3部分的,
             dfs(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(mat[i][j]==0){//因为是两棵树合并,所以有可能重复填充,所以只有填充0的时候计算ans++
                     mat[i][j] = 1;
                     ans++;
                 }
         }
     }
     public static void init(){
         ans = 0;
         for(int i=0; i<LEN; ++i)
             for(int j=0; j<LEN; ++j)
                 mat[i][j] = 0;
     }
     public static void main(String[] args) {
         int n;
         n = cin.nextInt();
         cin.nextLine();
         for(int i=0; i<n; ++i){
             init();
             p = 0;
             str = cin.nextLine();
             dfs(0,0,LEN);
             p = 0;
             str = cin.nextLine();
             dfs(0,0,LEN);
             System.out.println("There are "+ans+" black pixels.");
         }
     }
 }
uva297(quadtree)的更多相关文章
- [转]基于四叉树(QuadTree)的LOD地形实现
		
实现基于四叉树的LOD地形时,我遇到的主要问题是如何修补地形裂缝. 本段我将描述使用LOD地形的优势,我实现LOD地形的思路,实现LOD地形核心模块的详细过程,以及修补地形裂缝的思路. 首先,LOD地 ...
 - NoSQL 数据建模技术(转)
		
本文转载自:http://coolshell.cn/articles/7270.html ================================================ 全文译自墙外 ...
 - (原)Unreal渲染模块 管线 - 程序和场景查询
		
@author: 白袍小道 查看随意,转载随缘 第一部分: 这里主要关心加速算法,和该阶段相关的UE模块的结构和组件的处理. What-HOW-Why-HOW-What(嘿嘿,老规矩) 1.渲 ...
 - Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求
		
上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...
 - Angular2学习笔记(1)
		
Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...
 - ASP.NET Core 之 Identity 入门(一)
		
前言 在 ASP.NET Core 中,仍然沿用了 ASP.NET里面的 Identity 组件库,负责对用户的身份进行认证,总体来说的话,没有MVC 5 里面那么复杂,因为在MVC 5里面引入了OW ...
 - ABP入门系列(1)——学习Abp框架之实操演练
		
作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...
 - Online Judge(OJ)搭建(第一版)
		
搭建 OJ 需要的知识(重要性排序): Java SE(Basic Knowledge, String, FileWriter, JavaCompiler, URLClassLoader, Secur ...
 - 如何一步一步用DDD设计一个电商网站(九)—— 小心陷入值对象持久化的坑
		
阅读目录 前言 场景1的思考 场景2的思考 避坑方式 实践 结语 一.前言 在上一篇中(如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成),有一行注释的代码: public interfa ...
 
随机推荐
- 动态修改PE文件图标(使用UpdateResource API函数)
			
PE文件的图标存储在资源文件中,而操作资源要用到的API函数就是UpdateResource首先我们需要先了解一下ICO格式,参考资料:http://www.moon-soft.com/program ...
 - Android菜鸟的成长笔记(1)——Android开发环境搭建从入门到精通
			
原文:Android菜鸟的成长笔记(1)--Android开发环境搭建从入门到精通 今天在博客中看到好多Android的初学者对Android的开发环境的搭建不熟悉而导致不能进行学习,所以我决定自己写 ...
 - Android生存指南:Eclipse快捷键
			
天天使用的东西,可能是由于太习惯它了吧.总忘记学习怎样高效的使用它.正的谓磨刀不误劈柴功,找时间好好磨磨刀.于人于已都是有优点的.效率高了,多省出点时间去干自己真正喜欢干的事情吧. 精进Eclipse ...
 - python 时间戳 datetime string 转换
			
import datetime import time **datetime转时间戳** In [1]: now = datetime.datetime.now() In [2]: time.mkti ...
 - QT5.6,5.7,5.8的新特征以及展望
			
https://wiki.qt.io/New_Features_in_Qt_5.6 (跨平台High-DPI,改进WebEngine到45,支持WIN 10,Canvas3D,3D) https:// ...
 - Using Qt to build an Omi App for iOS (and Android)
			
JUNE 6, 2014 / HHARTZ Working on projects where the technology is pre-determined, it's often difficu ...
 - hdu 2594 Simpsons’ Hidden Talents 【KMP】
			
题目链接:http://acm.acmcoder.com/showproblem.php?pid=2594 题意:求最长的串 同一时候是s1的前缀又是s2的后缀.输出子串和长度. 思路:kmp 代码: ...
 - Spring3.0官网文档学习笔记(一)
			
Part 1 Spring框架概述 Spring是模块化的,在应用中仅仅须要引入你所须要用到的模块的jar包,其余的jar包不用引入. spring框架支持声明式的事务管理,通过RMI或web ser ...
 - 学习日记之命令模式和Effective C++
			
命令模式(Command): 讲一个请求封装为一个对象.从而使你可用不同的请求对客户进行參数化.对请求队列或记录请求日志.以及支持可撤销的操作. 命令模式长处: (1),它能较easy地设计一个命令队 ...
 - XML实例文档
			
from: http://www.w3school.com.cn/xpath/xpath_examples.asp XML实例文档 我们将在下面的例子中使用这个 XML 文档: "books ...