题目大意:将一块图像上的黑点在两种表示法之间转换。

题目分析:递归下去。。。

注意:输出时要注意细节!!!

代码如下:

# 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 (四分树)的更多相关文章

  1. UVA 806 Spatial Structures

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

  2. UVA806-Spatial Structures(四分树)

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

  3. UVA - 297 Quadtrees (四分树)

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

  4. UVa 806 四分树

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

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

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

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

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

  7. 四分树 (Quadtrees UVA - 297)

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

  8. uva806 Spatial Structures 空间结构 (黑白图像的四分树表示)

    input 8 00000000 00000000 00001111 00001111 00011111 00111111 00111100 00111000 -8 9 14 17 22 23 44 ...

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

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

随机推荐

  1. The key unit of modularity in OOP is the class, whereas in AOP the unit of modularity is the aspect.

    Spring Framework Overview https://www.tutorialspoint.com/spring/spring_overview.htm Aspect Oriented ...

  2. IoC COntainer Create Javabeans 可以通过读取beans.xml 文件来创建一个应用程序上下文对象 依赖反转

    Spring初学快速入门 - Spring教程™ https://www.yiibai.com/spring/spring-tutorial-for-beginners.html# pom <? ...

  3. 《图解HTTP》书摘

    图解HTTP 上野宣.于均良 1.3 网络基础 TCP/IP 2016-03-03 相互通信,双方就必须基于相同的方法.比如,如何探测到通信目标.由哪一边先发起通信.使用哪种语言进行通信.怎样结束通信 ...

  4. python控制台输出颜色

    python_控制台输出带颜色的文字方法在开发项目过程中,为了方便调试代码,经常会向stdout中输出一些日志,默认的这些日志就直接显示在了终端中.而一般的应用服务器,第三方库,甚至服务器的一些通告也 ...

  5. Django组件补充(缓存,信号,序列化)

    Django组件补充(缓存,信号,序列化) Django的缓存机制 1.1 缓存介绍 1.缓存的简介 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑 ...

  6. 162. Find Peak Element(二分查找 )

      A peak element is an element that is greater than its neighbors. Given an input array where num[i] ...

  7. 23TCP通信

    .pro 文件中加入:QT+=network 在Qt中实现TCP/IP服务器端通信的流程: 1.创建监听套接字,QTcpServer 2.将监听套接字设置为监听模式, listen 3.等待并接受客户 ...

  8. Core Java 6

    p277~p279: 1.使用解耦合的 try/catch 和 try/finally 语句块可以提高代码的清晰度,并且会报告 finally 子句中出现的错误. 2.假设利用 return 语句从 ...

  9. P1291 [SHOI2002]百事世界杯之旅(概率)

    P1291 [SHOI2002]百事世界杯之旅 设$f(n,k)$表示共n个名字,剩下k个名字未收集到,还需购买饮料的平均次数 则有: $f(n,k)=\frac{n-k}{n}*f(n,k) + \ ...

  10. 解决应用程序无法正常启动0xcxxxxxxxxxx问题

    简述:使用VS2008写了一个MFC程序,结果传到别人的机子上(WIN7)出现应用程序正常初始化(0xc0150002)失败的问题.为什么我的机子上可以,而别人的机子上运行不了呢?下面是我找到的一个解 ...