题意:

分析:

类似UVa 297, 模拟四分树四分的过程, 就是记录一个左上角, 记录宽度wideth, 然后每次w/2这样递归下去。 注意全黑是输出0, 不是输出1234。

 #include <bits/stdc++.h>
using namespace std;
// 1 2
// 3 4
const int base5[] = {,,,,,,,};
int n;
string G[];
vector<int> code;
int dfs(int r, int c, int w,int num,int dep){
int lt[][] = {{},{r,c},{r,c+w/},{r+w/,c},{r+w/, c+w/}}; for(int i = ; i <= ; i++){
int all_black = , have_black = ; for(int j = lt[i][]; j < lt[i][] + w/; j++){
for(int k = lt[i][]; k < lt[i][] + w/; k++){
if(G[j][k] == ''){
all_black = ;
}
else {
have_black = ;
}
}
}
if(all_black == ){ if(w == ){//宽度为2四分,只有一个格子, 只能为白
continue;
}
if(have_black)
dfs(lt[i][], lt[i][], w/, num + base5[dep]*i, dep + );
}
else{
code.push_back(num + base5[dep] * i);
}
}
}
void print(int r, int c, int w, int dep,int decode, int dec){
int lt[][] = {{},{r,c},{r,c+w/},{r+w/,c},{r+w/, c+w/}};
if(decode == ){
for(int i = r; i < r + w; i++){
for(int j = c; j < c + w; j++ ){
G[i][j] = '';
}
}
return;
} dec = decode % ;
decode /= ; for(int i = ; i <= ; i++){
if(dec == i){
print(lt[i][], lt[i][], w/ , dep + ,decode, dec);
}
else continue;
}
}
int main(){
ios::sync_with_stdio(false);
int kase = ;
while(cin >> n && n){ if(kase > ) cout <<'\n';
cout << "Image "<<kase ++ << '\n'; if(n > ){
int flag = ;
for(int i = ; i < n; i++){
cin >> G[i];
for(int j = ; j < G[i].size(); j++){
if(G[i][j] == '') flag = ;
}
}
if(!flag){//特判全黑
cout << "0\n";
cout << "Total number of black nodes = 1"<< "\n";
continue; } if(n == ){//特判n = 1 全白。
cout << "Total number of black nodes = 0" << "\n";
continue;
} dfs(,,n,,);
sort(code.begin(), code.end());
for(int i = ; i < code.size(); i++){
cout << code[i];
if((i + ) % == || i == code.size() - )
cout <<'\n';
else cout << ' ';
} cout << "Total number of black nodes = "<< code.size() << '\n';
code.clear();
} else {
n = -n;
for(int i = ; i < n; i++){
G[i] = "";
G[i]. resize(n +);//string要更改size才能下标访问
}
int decode;
while(cin >> decode && decode != -){
print(,,n,,decode, );
}
for(int i = ; i < n; i++){
for(int j = ; j < n; j++){
if(G[i][j] == ''){
cout << '*';
}
else cout << '.';
}
cout << '\n';
}
}
} return ;
}

UVa 806 四分树的更多相关文章

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

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

  2. UVa 297 四分树

    感觉特别像那个分治的日程表问题.是f的话就填,否则就不填,然后同一个表填两次.那么就是最后的结果. #include <iostream> #include <cstring> ...

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

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

  4. UVA - 297 Quadtrees (四分树)

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

  5. 四分树 (Quadtrees UVA - 297)

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

  6. 搜索(四分树):BZOJ 4513 [SDOI2016 Round1] 储能表

    4513: [Sdoi2016]储能表 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 395  Solved: 213[Submit][Status] ...

  7. [C++]四分树(Quadtrees)

    [本博文非博主原创,思路与题目均摘自 刘汝佳<算法竞赛与入门经典(第2版)>] 四分树Quadtrees 一幅图有1024个点, 可以对图平均分成4块, 并且子图也可以再往下分, 直到一个 ...

  8. UVA806-Spatial Structures(四分树)

    Problem UVA806-Spatial Structures Accept:329  Submit:2778 Time Limit: 3000 mSec Problem Description ...

  9. Uva297 Quadtrees【递归建四分树】【例题6-11】

    白书 例题6-11 用四分树来表示一个黑白图像:最大的图为根,然后按照图中的方式编号,从左到右对应4个子结点.如果某子结点对应的区域全黑或者全白,则直接用一个黑结点或者白结点表示:如果既有黑又有白,则 ...

随机推荐

  1. 【SpringCloud构建微服务系列】使用Spring Cloud Config统一管理服务配置

    一.为什么要统一管理微服务配置 对于传统的单体应用而言,常使用配置文件来管理所有配置,比如SpringBoot的application.yml文件,但是在微服务架构中全部手动修改的话很麻烦而且不易维护 ...

  2. logstsh | logstash-input-jdbc 启动错误收集

    1: Failed to execute action {:action=>LogStash::PipelineAction::Create/pipeline_id:main, :excepti ...

  3. hasLayout原理【转】

    项目中经常用到:*html .clearfix{ height:1%;}  //IE6能识别*+html .clearfix{height:1%;} //IE7能识别1,有很多方式能触发hasLayo ...

  4. MS SqlServer 通过数据库日志文件找回已删除的记录

    1.建立演示数据(创建数据库数据表添加基础数据) 1.1 创建数据库 1.2 创建数据表 1.3填充数据 1.4做数据库完整备份 2.模拟误删除.记录操作时间.备份数据库日志 2.1删除数据并记录操作 ...

  5. Dev之GridControl详解

    Dev控件中的表格控件GridControl控件非常强大.不过,一些细枝末节的地方有时候用起来不好找挺讨厌的.使用过程中,多半借助Demo和英文帮助文档.网上具体的使用方法也多半零碎.偶遇一个简单而且 ...

  6. Spark学习之在集群上运行Spark(6)

    Spark学习之在集群上运行Spark(6) 1. Spark的一个优点在于可以通过增加机器数量并使用集群模式运行,来扩展程序的计算能力. 2. Spark既能适用于专用集群,也可以适用于共享的云计算 ...

  7. Python3 动手自己写谷歌翻译

    本篇为实现谷歌翻译的功能,在编写的时候以为只是一个接口的问题. 没想到的是每次翻译都会触发一次JS的执行,在请求参数中生成一个tk. 文中tk的实现是复用的网上大神的代码生成tk. 好了,不说了直接看 ...

  8. git ---理论知识

    理论基础: 不要高估自己的智商,不要低估Git的能耐. 1.Git记录的 是什么? 记录每一次版本变动的内容 将每个版本独立保存 方便分支管理. 2.git的三棵树---工作区.暂存区域和Git仓库 ...

  9. rar在linux下安装更新

    1.下载:根据主机系统下载合适的版本,当前64为centos系统演示下载: wget http://www.rarlab.com/rar/rarlinux-x64-5.3.0.tar.gz 2.解压安 ...

  10. 键盘工具栏的快速集成--IQKeyboardManager

    转自:http://www.cnblogs.com/gaoxiaoniu/p/5333187.html 键盘工具栏的快速集成--IQKeyboardManager IQKeyboardManager, ...