uva806 Spatial Structures 空间结构 (黑白图像的四分树表示)
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 空间结构 (黑白图像的四分树表示)的更多相关文章
- UVA-806 Spatial Structures (四分树)
题目大意:将一块图像上的黑点在两种表示法之间转换. 题目分析:递归下去... 注意:输出时要注意细节!!! 代码如下: # include<iostream> # include<c ...
- [刷题]算法竞赛入门经典(第2版) 6-8/UVa806 - Spatial Structures
题意:黑白图像的路径表示法 代码:(Accepted,0.120s) //UVa806 - Spatial Structures //Accepted 0.120s //#define _XIENAO ...
- [ActionScript 3.0] AS3.0 将图像的Alpha通道转换为黑白图像(分离ARGB方式)
import flash.display.BitmapData; import flash.display.Bitmap; /** * 将图像的Alpha通道转换为黑白图像(分离ARGB方式) */ ...
- [ActionScript 3.0] AS3.0将图像的Alpha通道转换为黑白图像(复制通道方式)
import flash.display.BitmapData; /** * 将图像的Alpha通道转换为黑白图像 */ var p:Point = new Point(0,0); var bmpd: ...
- 黑白图像(DFS)
输入一个n*n的黑白图像(1表示黑色,0表示白色),任务是统计其中八连块的个数.如果两个黑格子有公共边或者公共顶点,就说它们属于同一个八连块.如图6-11所示的图形有3个八连块. 图6-11 拥有3 ...
- UVA 806 Spatial Structures
题意: 如果某一大区域所有色块颜色是相同的,那么这一个大区域就算作一块,如果不同,则将其划分成四个小区域,然后重复上述步骤递归进行直到所有区域的颜色相同为止.然后根据上面划分的区域建树,小区域作为大区 ...
- TZOJ 3533 黑白图像(广搜)
描述 输入一个n*n的黑白图像(1表示黑色,0表示白色),任务是统计其中八连块的个数.如果两个黑格子有公共边或者公共顶点,就说它们属于同一个八连块.如图所示的图形有3个八连块. 输入 第1行输入一个正 ...
- MATLAB读取黑白图像显示却是黑色,24位深转8位深黑白图像解决方法
1.24位深转8位深: ps将24位深原图.png保存为GIF图256即为8位,再将8位gif图转为需要的.png,即转为8位深png图. 2.MATLAB读取黑白图像显示几乎全为黑色: 这是最近处理 ...
- 小白书 黑白图像【DFS/Flood Fill】
http://blog.csdn.net/u010470972/article/details/33415617 Description 输入一个n×n的黑白图像(1表示黑色,0表示白色),任务是统计 ...
随机推荐
- Oracle(1)
PL/SQL -- 表示注释 ||''|| 拼接字符串 别名 null值和所有数值计算结果都为null 空置值转换函数: nvl(列,所要转换的数) in 相当于用 or 链接. not in 相当于 ...
- rpm 软件包
rpm 软件包 Linux 中有安装软件方式有两种,源码安装以及软件包安装: 压缩包:源码包,编译后安装 rpm(redhat package manager 红帽软件包管理):需要编译,直接安装 ...
- C#—反射(反射类型、方法、构造函数、属性、实现可配置可扩展、数据库访问类反射封装)
反射是.NET中的重要机制,通过反射,可以在运行时获得程序或程序集中每一个类型(包括类.结构.委托.接口和枚举等)的成员和成员的信息.有了反射,即可对每一个类型了如指掌.另外我还可以直接创建对象,即使 ...
- 再论c#获取存储过程返回值(包括SqlSugar)
其实这个问题好多年以前研究过: https://blog.csdn.net/xpnew/article/details/6909902 最近因为需要统计日结月结,给同事写了一套调用存储过程的代码.同时 ...
- 搭建 Keras
首先安装ipython ipython安装完成以后出现如下界面 然后安装theano 中途安装因为网络不好,造成超时而停止安装或者停滞不前,则按下Ctrl+C,停止此操作,或者关掉Anaconda P ...
- [openjudge] 2797最短前缀 Trie
描述 一个字符串的前缀是从该字符串的第一个字符起始的一个子串.例如 "carbon"的字串是: "c", "ca", "car&q ...
- 【并发编程】一文带你读懂深入理解Java内存模型(面试必备)
并发编程这一块内容,是高级资深工程师必备知识点,25K起如果不懂并发编程,那基本到顶.但是并发编程内容庞杂,如何系统学习?本专题将会系统讲解并发编程的所有知识点,包括但不限于: 线程通信机制,深入JM ...
- $SCOJ4427 Miss Zhao's Graph$
\(problem\) 给定一个包含n个顶点m条边的带权有向图,找一条边数最多的路径,且路径上的边的权值严格递增. 图中可能有重边和自环. \(题意非常简单:n个点 m个带权边 最多能连成多少条边\) ...
- 题解 P1006 传纸条
传送门 其实我觉得这个跟P1004挺类似(又是动规) 题解P1004 #include<iostream> #include<cstdio> #include<cstri ...
- Java EE学习笔记(八)
动态SQL 1.动态SQL中的元素 1).作用:无需手动拼装SQL,MyBatis已提供的对SQL语句动态组装的功能,使得数据库开发效率大大提高! 2).动态SQL是MyBatis的强大特性之一,My ...