UVA-806 Spatial Structures (四分树)
题目大意:将一块图像上的黑点在两种表示法之间转换。
题目分析:递归下去。。。
注意:输出时要注意细节!!!
代码如下:
# include<iostream>
# include<cstdio>
# include<vector>
# include<string>
# include<cstring>
# include<algorithm>
using namespace std; char p[80][80];
int ans;
vector<int>v; int get(int r,int c,int w)
{
int cnt=0;
for(int i=r;i<r+w;++i)
for(int j=c;j<c+w;++j)
if(p[i][j]=='1')
++cnt;
return cnt;
} int getVal(string path)
{
int l=path.size();
int res=0;
for(int i=l-1;i>=0;--i)
res=res*5+path[i]-'0';
return res;
} ///查看以(r,c)为左上角,边长为w的子正方形。下同。
void f1(int r,int c,int w,string path)
{
int k=get(r,c,w);
if(k==0)
return ;
if(k==w*w){
++ans;
v.push_back(getVal(path));
return ;
}
f1(r,c,w/2,path+'1');
f1(r,c+w/2,w/2,path+'2');
f1(r+w/2,c,w/2,path+'3');
f1(r+w/2,c+w/2,w/2,path+'4');
} void f2(int r,int c,int w,int s)
{
if(s==0){
for(int i=r;i<r+w;++i)
for(int j=c;j<c+w;++j)
p[i][j]='*';
return ;
}
int mod=s%5;
if(mod==1)
f2(r,c,w/2,s/5);
else if(mod==2)
f2(r,c+w/2,w/2,s/5);
else if(mod==3)
f2(r+w/2,c,w/2,s/5);
else if(mod==4)
f2(r+w/2,c+w/2,w/2,s/5);
} int main()
{
//freopen("UVA-806 Spatial Structures.txt","r",stdin);
int n,cas=0,flag=0;
while(scanf("%d",&n)&&n)
{
v.clear();
if(flag)
printf("\n");
flag=1;
if(n>0){
for(int i=0;i<n;++i)
scanf("%s",p[i]);
printf("Image %d\n",++cas);
ans=0;
f1(0,0,n,"");
sort(v.begin(),v.end());
int l=v.size();
for(int i=0;i<l;++i)
printf("%d%c",v[i],(i%12==11||i==l-1)?'\n':' ');
printf("Total number of black nodes = %d\n",ans);
}
if(n<0){
n=-n;
for(int i=0;i<n;++i){
for(int j=0;j<n;++j)
p[i][j]='.';
p[i][n]=0;
}
int a;
while(scanf("%d",&a)&&a!=-1)
v.push_back(a);
printf("Image %d\n",++cas);
int l=v.size();
for(int i=0;i<l;++i)
f2(0,0,n,v[i]);
for(int i=0;i<n;++i)
puts(p[i]);
}
}
return 0;
}
UVA-806 Spatial Structures (四分树)的更多相关文章
- UVA 806 Spatial Structures
题意: 如果某一大区域所有色块颜色是相同的,那么这一个大区域就算作一块,如果不同,则将其划分成四个小区域,然后重复上述步骤递归进行直到所有区域的颜色相同为止.然后根据上面划分的区域建树,小区域作为大区 ...
- UVA806-Spatial Structures(四分树)
Problem UVA806-Spatial Structures Accept:329 Submit:2778 Time Limit: 3000 mSec Problem Description ...
- UVA - 297 Quadtrees (四分树)
题意:求两棵四分树合并之后黑色像素的个数. 分析:边建树边统计. #include<cstdio> #include<cstring> #include<cstdlib& ...
- UVa 806 四分树
题意: 分析: 类似UVa 297, 模拟四分树四分的过程, 就是记录一个左上角, 记录宽度wideth, 然后每次w/2这样递归下去. 注意全黑是输出0, 不是输出1234. #include &l ...
- UVA.297 Quadtrees (四分树 DFS)
UVA.297 Quadtrees (四分树 DFS) 题意分析 将一个正方形像素分成4个小的正方形,接着根据字符序列来判断是否继续分成小的正方形表示像素块.字符表示规则是: p表示这个像素块继续分解 ...
- UVa 297 (四分树 递归) Quadtrees
题意: 有一个32×32像素的黑白图片,用四分树来表示.树的四个节点从左到右分别对应右上.左上.左下.右下的四个小正方区域.然后用递归的形式给出一个字符串代表一个图像,f(full)代表该节点是黑色的 ...
- 四分树 (Quadtrees UVA - 297)
题目描述: 原题:https://vjudge.net/problem/UVA-297 题目思路: 1.依旧是一波DFS建树 //矩阵实现 2.建树过程用1.0来填充表示像素 #include < ...
- uva806 Spatial Structures 空间结构 (黑白图像的四分树表示)
input 8 00000000 00000000 00001111 00001111 00011111 00111111 00111100 00111000 -8 9 14 17 22 23 44 ...
- 搜索(四分树):BZOJ 4513 [SDOI2016 Round1] 储能表
4513: [Sdoi2016]储能表 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 395 Solved: 213[Submit][Status] ...
随机推荐
- C#操作word之插入图片
假如我们导出一份简历到word文档,那势必可能要同时导出我们包含的简历,下面就来试一下如何和通过C#代码,将图片插入到word文档中. 为了简便起见,就简单一点.类似下面这样的 姓名 张三 照片 ...
- PHP面向对象详解:继承、封装与多态
首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一系列个体的集合,类是一个抽象的概念2.什么是对象?从类中拿到的具有具体属性值得个体, ...
- java-信息安全(十八)java加密解密,签名等总结
一.基本概念 加密: 密码常用术语: 明文,密文,加密,加密算法,加密秘钥,解密,解密算法,解密秘钥, 密码分析:分析密文从而推断出明文或秘钥的过程 主动攻击:入侵密码系统,采用伪造,修改,删除等手段 ...
- Spark Shuffle(二)Executor、Driver之间Shuffle结果消息传递、追踪(转载)
1. 前言 在博客里介绍了ShuffleWrite关于shuffleMapTask如何运行,输出Shuffle结果到Shuffle_shuffleId_mapId_0.data数据文件中,每个exec ...
- Spring整合Mybatis解决 Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required
在Spring4和Mybatis3整合的时候,dao层注入'sqlSessionFactory'或'sqlSessionTemplate'会报错解决办法如下: package com.alibaba. ...
- HDU2588:GCD(欧拉函数的应用)
题目链接:传送门 题目需求:Given integers N and M, how many integer X satisfies 1<=X<=N and (X,N)>=M.(2& ...
- 工作记录之开发HRM项目总结
开发HRM项目的步骤: 1:首先保留HRM项目中的两张表(Employee,Position)把这两张表中的数据内容复制到Operator-Portlet这个项目中,这两张表的service.xml配 ...
- Java用数据结构解决实现问题之数学问题
有趣的整数: 完数:如果一个数字恰好等于他的因子之和,就叫做完数,需求是求出10000以内的所有的完数. 解法:1.用n去除以1-n之间的所有的整数,将能整除的被除数保存到一个数组中,作为n的一个因子 ...
- 24UDP通信
使用Qt提供的QUdpSocket进行UDP通信.在UDP方式下,客户端并不与服务器建立连接,它只负责调用发送函数向服务器发送数据.类似的服务器也不从客户端接收连接,只负责调用接收函数,等待来自客户端 ...
- vertica单节点安装教程
[准备] 1.CentOS 7.6的镜像盘(下载地址:官网) 2.vertica-9.1.0-0.x86_64.RHEL6(下载地址:https://pan.baidu.com/s/1IjWBUTku ...