四叉树
Time Limit: 1000msMemory Limit: 65536KB 64-bit integer IO format: %lld Java class name: Main
Prev Submit Status Statistics Discuss Next
Type:
None

Tag it!
四叉树是一种常用的数据结构,广泛应用于栅格数据(如地图数据、遥感图像)的压缩编码中。将四叉树扩展到三维就形成了八叉树,可实现三维信息的压缩存储。下面是它的实现原理:

如图是一个8*8图象,如果该图像所有元素都一样(都是0或都是1),就编码为0,再加上公共一样的元素(如01或00)。如果不一样,就先编码为1,然后把图像分成4个4*4图像。继续上面的操作,直到该小区域中,所有像素都是一样的元素为止(当然,最后可能只剩下一个象素点)。最后,(如(d)图)按照剖分的层次,自顶向下,从左至右,把所有的01序列连接起来。如上图,图像的编码为:100101100011000000010100010001 注意:同一层次四个小图象,合并的顺序是:左上、右上、左下,右下,如(d)图所示。
本题要求同学们编程实现这一编码过程,输出压缩之后的0-1序列。

Input
输入第一行,一个正整数n,一定是2的幂(2、4、8、16等等),最大不超过16
下面是一个n*n的01矩阵,矩阵的元素只有0和1

Output
输出压缩之后的01序列,一个字符串,只有0和1

Sample Input
8
0 0 0 0 0 0 1 1
0 0 0 0 0 0 1 1
0 0 0 0 0 1 0 0
0 0 0 0 0 1 0 0
1 1 1 1 0 0 0 0
1 1 1 1 0 0 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1

Sample Output
100101100011000000010100010001
Source
中国地质大学(北京)第三届程序设计竞赛

可以选择建立四叉树,然后进行维护。也可以用深搜的方法。
深搜 短短五十多行

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string>
#include<math.h>
#include<string.h>
#include<ctype.h>
using namespace std;
const int maxn=18;
int map[maxn][maxn];
string str[maxn];
int n;
bool check(int x,int y,int flag)
{for(int i=0; i<flag; ++i)for(int j=0; j<flag; ++j)if(map[x+i][y+j]!=map[x][y])return false;return true;
}
void DFS(int x,int y,int flag,int deep)//搜索起始点坐标,坐标分割次数,递归深度
{string temp="1";if(check(x,y,flag)){temp="0";if(map[x][y]==0)temp+="0";elsetemp+="1";str[deep]+=temp;return;}str[deep]+=temp;DFS(x,y,flag>>1,deep+1);DFS(x,y+(flag>>1),flag>>1,deep+1);DFS(x+(flag>>1),y,flag>>1,deep+1);DFS(x+(flag>>1),y+(flag>>1),flag>>1,deep+1);
}
int main()
{while(~scanf("%d",&n)){for(int i=0; i<n; ++i)for(int j=0; j<n; ++j)scanf("%d",&map[i][j]);for(int i=0; i<maxn; ++i)str[i]="";DFS(0,0,n,0);for(int i=0; i<=log2(n); ++i)cout<<str[i];cout<<endl;}return 0;
}

建树 http://blog.csdn.net/wr_technology/article/details/51204075

BNUOJ-4049-四叉树相关推荐

  1. BNUOJ 52305 Around the World 树形dp

    题目链接: https://www.bnuoj.com/v3/problem_show.php?pid=52305 Around the World Time Limit: 20000msMemory ...

  2. 对于四叉树之(why?what?how)

    一.为什么.地图如果是100k*100k,那么该怎么办呢.所以要分割地图.. 二.四叉树是一个不错的分割方法.

  3. js小球与边框碰撞反弹_四叉树在碰撞检测中的应用

    缘起 <你被追尾了>中预告了加速碰撞检测的算法--四叉树(for 2D),所以本文就来学习一下. 分析 首先是为什么要使用四叉树进行优化,其实<你被追尾了>中已经说了,这里简单 ...

  4. BNUOJ 34978 汉诺塔

    题目链接:http://www.bnuoj.com/bnuoj/problem_show.php?pid=34978 比赛还剩不到2分钟的时候想到了解法,写好代码提交时卡了一下,出AC结果时比赛已经结 ...

  5. 希尔伯特曲线的绘制c语言,用四叉树和希尔伯特曲线做空间索引

    <用四叉树和希尔伯特曲线做空间索引>由会员分享,可在线阅读,更多相关<用四叉树和希尔伯特曲线做空间索引(11页珍藏版)>请在人人文库网上搜索. 1.超酷算法:用四叉树和希尔伯特 ...

  6. ORB-SLAM2中四叉树管理特征点

    当从图像金字塔中的每一层图像上提取特征点之后,都要先用四叉树技术对这些特征点进行管理 //该类中定义了四叉树创建的函数以及树中结点的属性 //bool bNoMore: 根据该结点中被分配的特征点的数 ...

  7. hdu 4049 Tourism Planning [ 状压dp ]

    传送门 Tourism Planning Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  8. BNUOJ 4358 左手定则 搜索

    题目链接:http://acm.bnu.edu.cn/bnuoj/problem_show.php?pid=4358 一道很好的搜索题,要注意DFS函数的写法,特别是return的写法. View C ...

  9. LeetCode 558. 四叉树交集(递归)

    1. 题目 四叉树是一种树数据,其中每个结点恰好有四个子结点:topLeft.topRight.bottomLeft 和 bottomRight.四叉树通常被用来划分一个二维空间,递归地将其细分为四个 ...

  10. LeetCode 427. 建立四叉树(递归)

    1. 题目 我们想要使用一棵四叉树来储存一个 N x N 的布尔值网络.网络中每一格的值只会是真或假.树的根结点代表整个网络.对于每个结点, 它将被分等成四个孩子结点直到这个区域内的值都是相同的. 每 ...

最新文章

  1. iOS NSRunloop 详解
  2. 1 access中iif函数中的_JavaScript中的高阶函数
  3. jap页面使用ajax动态加载列表数据,JSF - 使用AJAX调用基于DataTable中的mimetype值加载不同形式...
  4. HDU - 6704 K-th occurrence (后缀数组+主席树)
  5. 使用活动记录执行CRUD
  6. html:(8):span标签和q标签
  7. 学校如何把表格里的成绩,让学生以二维码的方式去扫描查询呢?
  8. JS获取当前页面的URL参数
  9. 用计算机算e的平方为什么显示错误,计算器中出现的E是什么意思?
  10. Java POI word常用方法 在Cell插入子表格
  11. 人生不怕晚,就看敢不敢|优锘科技 X《无尽攀登》专场见面会
  12. 企业常见10个CRM问题答疑!
  13. SparkSQL ClickHouse RoaringBitmap使用实践
  14. 网页内嵌的视频添加 vtt 外挂字幕
  15. flask爱家租房项目开发(十二)
  16. 男孩子读博士的十大好处
  17. 关于python中面向对象(一)
  18. echarts年龄饼图_echarts饼图
  19. 模拟电子技术(二)基本放大电路
  20. MMFNet: A Multi-modality MRI Fusion Network for Segmentation of Nasopharyngeal Carcinoma

热门文章

  1. 操作 神通数据库_神通大型通用数据库
  2. 如何扒微信小程序源码
  3. android编程歌词显示,Android 音乐播放器实现歌词显示
  4. laravel使用irazasyed/laravel-gamp集成google analytics
  5. stm32 操作W25Q256 W25Q16 spi flash
  6. miRNA数据库篇——RNAcentral
  7. 空间数据格式转换之MapInfo mid/mif文件转ArcGIS shpfile文件
  8. 倾斜摄影模型(.osgb)中心点位置的确定方法(SuperMap idesktop)
  9. VS开发问题:应用程序无法启动 因为程序的并行配置不正确 ,解决方案
  10. 我的创作纪念日 | 软件测试成长之路