UVa 806 四分树
题意:

分析:
类似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 四分树的更多相关文章
- UVa 297 (四分树 递归) Quadtrees
题意: 有一个32×32像素的黑白图片,用四分树来表示.树的四个节点从左到右分别对应右上.左上.左下.右下的四个小正方区域.然后用递归的形式给出一个字符串代表一个图像,f(full)代表该节点是黑色的 ...
- UVa 297 四分树
感觉特别像那个分治的日程表问题.是f的话就填,否则就不填,然后同一个表填两次.那么就是最后的结果. #include <iostream> #include <cstring> ...
- UVA.297 Quadtrees (四分树 DFS)
UVA.297 Quadtrees (四分树 DFS) 题意分析 将一个正方形像素分成4个小的正方形,接着根据字符序列来判断是否继续分成小的正方形表示像素块.字符表示规则是: p表示这个像素块继续分解 ...
- UVA - 297 Quadtrees (四分树)
题意:求两棵四分树合并之后黑色像素的个数. 分析:边建树边统计. #include<cstdio> #include<cstring> #include<cstdlib& ...
- 四分树 (Quadtrees UVA - 297)
题目描述: 原题:https://vjudge.net/problem/UVA-297 题目思路: 1.依旧是一波DFS建树 //矩阵实现 2.建树过程用1.0来填充表示像素 #include < ...
- 搜索(四分树):BZOJ 4513 [SDOI2016 Round1] 储能表
4513: [Sdoi2016]储能表 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 395 Solved: 213[Submit][Status] ...
- [C++]四分树(Quadtrees)
[本博文非博主原创,思路与题目均摘自 刘汝佳<算法竞赛与入门经典(第2版)>] 四分树Quadtrees 一幅图有1024个点, 可以对图平均分成4块, 并且子图也可以再往下分, 直到一个 ...
- UVA806-Spatial Structures(四分树)
Problem UVA806-Spatial Structures Accept:329 Submit:2778 Time Limit: 3000 mSec Problem Description ...
- Uva297 Quadtrees【递归建四分树】【例题6-11】
白书 例题6-11 用四分树来表示一个黑白图像:最大的图为根,然后按照图中的方式编号,从左到右对应4个子结点.如果某子结点对应的区域全黑或者全白,则直接用一个黑结点或者白结点表示:如果既有黑又有白,则 ...
随机推荐
- Luogu P1280 Niko的任务【线性dp】By cellur925
Nikonikoni~~ 题目传送门 这是当时学长讲dp的第一道例题,我还上去献了个丑,然鹅学长讲的方法我似董非董(??? 我当时说的怎么设计这道题的状态,但是好像说的是二维,本题数据范围均在1000 ...
- 洛谷 P1540 机器翻译(队列)
题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词,软件会先 ...
- java 调用动态库打包sdk
java连接c++动态库并生成jar包提供给别人调用 1.需要将java通过jni生成头文件,并导入到c++项目并对c++进行jni方法继承 在项目的src目录执行,否则会提示 错误:找不到符号 ja ...
- Robot Framework问题汇总...不断更新中
在实际使用Robot Framework工具过程中,难免会遇到一些问题, 我们将会一一记录下来,以便后来者碰到类似的问题能够快速解决! 安装类问题: ========================= ...
- jenkins构建maven项目
使用jenkins构建部署maven项目 因为一开始我们是自定义插件,所以构建项目的时候没有显示maven风格的项目.如果要想使用maven,我们这里必须得安装一下插件,我们在插件管理器中, 可以看到 ...
- 牛客小白月赛5-D-阶乘(求n内每个数的阶乘相乘后尾数为0的个数)
题目描述 输入描述: 输入数据共一行,一个正整数n,意义如“问题描述”. 输出描述: 输出一行描述答案:一个正整数k,表示S的末尾有k个0 输入例子: 10 输出例子: 7 --> 示例1 输入 ...
- 设计模式 -- Abstract Factory 抽象工厂
1.常规的对象创建方法 //创建一个Road对象 Road road=new Road(); new的问题:实现依赖,不能应对“具体实例化类型”额变化. 解决思想: 封装变化点--哪里变化,封装哪里( ...
- 如何在tomcat部署项目(用ip访问)
找了好长时间的错误,server.xml中一点错误也没有,但就是访问不到,最终发现就是服务器没有开放80端口的缘故. 服务器是Windows系统 1.控制面板=>系统和安全=>Window ...
- js promise 介绍和使用
1.什么是promise js是单线程执行的. ajax是典型的异步操作,我们通常会在ajax的成功或者失败之后写上回掉函数.这中写法是一种嵌套的方式,如果回掉多了会造成代码复杂并且难以复用. pro ...
- rest_framework基于generics.CreateAPIView创建用户
最近在写新版的devops3.0,被generics.CreateAPIView创建用户密码序列化的问题折磨的欲仙欲死.反复看源码测试,得出下面的流程,这也是做generics.CreateAPIVi ...