input

8
00000000
00000000
00001111
00001111
00011111
00111111
00111100
00111000
-8
9 14 17 22 23 44 63 69 88 94 113 -1
2
00
00
-4
0 -1
0

output

Image 1
9 14 17 22 23 44 63 69 88 94 113
Total number of black nodes = 11 Image 2
........
........
....****
....****
...*****
..******
..****..
..***... Image 3
Total number of black nodes = 0 Image 4
****
****
****
**** 这题目就是给你黑白点图的两种表示方法让你互相转化,写的时候没注意格式。
数字是代表四分树黑色结点到根的距离,由于定义是递归的,所以不必真的把树建出来。


/*
Created by Rey Chen on 2015.6.30
Copyright (c) 2015 Rey . All rights reserved.
*/ #include<cstdio>
#include<algorithm>
using namespace std;
const int maxn = ; char G[maxn][maxn]; int path[maxn*maxn];
int sz; void solve1(int r1,int c1,int r2,int c2,int wei,int sum)
{
bool whi, bla; whi = bla = false;
for(int i = r1;i <= r2;i++)
for(int j = c1;j <= c2;j++){
if(!bla && G[i][j] == '') bla = true;
if(!whi && G[i][j] == '') whi = true;
if(whi&&bla) { break;}
}
if(bla) {
if(!whi) {path[++sz] = sum; return;}
}else if(whi) return; int dvr = r1+r2>>, dvc = c1+c2>>;
int nwei = *wei;
solve1( r1, c1,dvr,dvc,nwei,sum+ wei );
solve1( r1,dvc+,dvr, c2,nwei,sum+(wei<<));
solve1(dvr+, c1 ,r2,dvc,nwei,sum+ wei* );
solve1(dvr+,dvc+, r2 ,c2,nwei,sum+(wei<<));
} int a[];
void draw(int n,int r1,int c1,int r2,int c2){
int Sz = ;
while(n){ a[Sz++]=n%;n/=;}
for(int i = ; i < Sz;i++){
switch (a[i]){
case :{
r2 = r1+r2>>; c2 = c1+c2>>;
break;
}
case :{
r2 = r1+r2>>; c1 = (c1+c2>>)+;
break;
}
case :{
r1 = (r1+r2>>)+; c2 = c1+c2>>;
break;
}
case :{
r1 = (r1+r2>>)+; c1 = (c1+c2>>)+;
break;
}
}
}
for(int i = r1;i <= r2;i++)
for(int j = c1;j <= c2;j++)
G[i][j] = '*';
} int main()
{
int n;
int Cas = ;
while(~scanf("%d",&n)&&n){
if(Cas) puts("");
if(n>){
for(int i = ; i < n; i++)
scanf("%s",G[i]);
sz = ;
solve1(,,n-,n-,,);
sort(path+,path+sz+); printf("Image %d\n",++Cas);
for(int i = ; i < sz; i++)//PE了。。。
printf("%d%c",path[i],i%?' ':'\n');
if(sz)printf("%d\n",path[sz]);
printf("Total number of black nodes = %d\n",sz);
}else {
n = -n;
int t;
for(int i = ;i < n;i++){
for(int j = ;j < n;j++)
G[i][j]='.';
G[i][n] = '\0';
} while(scanf("%d",&t)&&~t){
draw(t,,,n-,n-);
}
printf("Image %d\n",++Cas);
for(int i = ;i < n;i++)
puts(G[i]);
} }
return ;
}

uva806 Spatial Structures 空间结构 (黑白图像的四分树表示)的更多相关文章

  1. UVA-806 Spatial Structures (四分树)

    题目大意:将一块图像上的黑点在两种表示法之间转换. 题目分析:递归下去... 注意:输出时要注意细节!!! 代码如下: # include<iostream> # include<c ...

  2. [刷题]算法竞赛入门经典(第2版) 6-8/UVa806 - Spatial Structures

    题意:黑白图像的路径表示法 代码:(Accepted,0.120s) //UVa806 - Spatial Structures //Accepted 0.120s //#define _XIENAO ...

  3. [ActionScript 3.0] AS3.0 将图像的Alpha通道转换为黑白图像(分离ARGB方式)

    import flash.display.BitmapData; import flash.display.Bitmap; /** * 将图像的Alpha通道转换为黑白图像(分离ARGB方式) */ ...

  4. [ActionScript 3.0] AS3.0将图像的Alpha通道转换为黑白图像(复制通道方式)

    import flash.display.BitmapData; /** * 将图像的Alpha通道转换为黑白图像 */ var p:Point = new Point(0,0); var bmpd: ...

  5. 黑白图像(DFS)

    输入一个n*n的黑白图像(1表示黑色,0表示白色),任务是统计其中八连块的个数.如果两个黑格子有公共边或者公共顶点,就说它们属于同一个八连块.如图6-11所示的图形有3个八连块. 图6-11  拥有3 ...

  6. UVA 806 Spatial Structures

    题意: 如果某一大区域所有色块颜色是相同的,那么这一个大区域就算作一块,如果不同,则将其划分成四个小区域,然后重复上述步骤递归进行直到所有区域的颜色相同为止.然后根据上面划分的区域建树,小区域作为大区 ...

  7. TZOJ 3533 黑白图像(广搜)

    描述 输入一个n*n的黑白图像(1表示黑色,0表示白色),任务是统计其中八连块的个数.如果两个黑格子有公共边或者公共顶点,就说它们属于同一个八连块.如图所示的图形有3个八连块. 输入 第1行输入一个正 ...

  8. MATLAB读取黑白图像显示却是黑色,24位深转8位深黑白图像解决方法

    1.24位深转8位深: ps将24位深原图.png保存为GIF图256即为8位,再将8位gif图转为需要的.png,即转为8位深png图. 2.MATLAB读取黑白图像显示几乎全为黑色: 这是最近处理 ...

  9. 小白书 黑白图像【DFS/Flood Fill】

    http://blog.csdn.net/u010470972/article/details/33415617 Description 输入一个n×n的黑白图像(1表示黑色,0表示白色),任务是统计 ...

随机推荐

  1. EditText 设置可以输入的字符,过滤不符合接口要求的数据的方法

    1.设置EditText的android:digits 属性, 这种方式可以指出要支持的字符.比如要限制只能输入数字和字母,可以这样android:digits="1234567890ABC ...

  2. 简单的GTK窗体搭建

    #include<gtk/gtk.h> //必须引用gtk/gtk.h这个头文件 2 int main(int argc,char *argv[]) //标准c语言主函数的声明 3 { 4 ...

  3. js框架:angularJs

    AngularJS是一个javascript框架,是一个以JavaScript编写的库,可通过<script>标签添加到HTML页面 AngularJS使得开发现代的单一页面应用程序(SP ...

  4. Glassfish DeploymentException: Error in linking security policy for

    http://stackoverflow.com/questions/7322476/glassfish-deploymentexception-error-in-linking-security-p ...

  5. cmd 中粘贴复制(转)

    1 如右图,右键命令提示符窗口的标题栏,选择属性. 2 选择“编辑选项”里的“快速编辑模式”,并确定之: 3 在弹出的应用选择提示框上选择“保存属性,供以后具有相同标题的窗口使用”: 4 如此你就可以 ...

  6. xml布局文件

    https://blog.csdn.net/u013475386/article/details/44339035 gravity写在容器中中 layout_gravity写在控件中 layout_m ...

  7. ELK系列(1) - Elasticsearch + Logstash + Kibana + Log4j2快速入门与搭建用例

    前言 最近公司分了个ELK相关的任务给我,在一边学习一边工作之余,总结下这些天来的学习历程和踩坑记录. 首先介绍下使用ELK的项目背景:在项目的数据库里有个表用来存储消息队列的消费日志,这些日志用于开 ...

  8. Python网络编程之基础

    计算机网络基础 网络到底是什么?计算机之间如何通信的? 早期:联机 以太网:局域网与交换机 ******广播 主机之间“一对所有”的通讯模式,网络对其中每一台主机发出的信号都进行无条件复制并转发, 所 ...

  9. 获取所有bean的名字

    import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.facto ...

  10. 使用centos7的wall防火墙可能存在失效问题

    centos7有自己新的防火墙,但是仍然带有centos6.5的iptable防火墙,当新防火墙不稳定,失效时,可以采用老防火墙 以上都是在vm虚拟机上发现的问题 参考文章 https://www.c ...