BNUOJ-4049-四叉树
四叉树
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-四叉树相关推荐
- BNUOJ 52305 Around the World 树形dp
题目链接: https://www.bnuoj.com/v3/problem_show.php?pid=52305 Around the World Time Limit: 20000msMemory ...
- 对于四叉树之(why?what?how)
一.为什么.地图如果是100k*100k,那么该怎么办呢.所以要分割地图.. 二.四叉树是一个不错的分割方法.
- js小球与边框碰撞反弹_四叉树在碰撞检测中的应用
缘起 <你被追尾了>中预告了加速碰撞检测的算法--四叉树(for 2D),所以本文就来学习一下. 分析 首先是为什么要使用四叉树进行优化,其实<你被追尾了>中已经说了,这里简单 ...
- BNUOJ 34978 汉诺塔
题目链接:http://www.bnuoj.com/bnuoj/problem_show.php?pid=34978 比赛还剩不到2分钟的时候想到了解法,写好代码提交时卡了一下,出AC结果时比赛已经结 ...
- 希尔伯特曲线的绘制c语言,用四叉树和希尔伯特曲线做空间索引
<用四叉树和希尔伯特曲线做空间索引>由会员分享,可在线阅读,更多相关<用四叉树和希尔伯特曲线做空间索引(11页珍藏版)>请在人人文库网上搜索. 1.超酷算法:用四叉树和希尔伯特 ...
- ORB-SLAM2中四叉树管理特征点
当从图像金字塔中的每一层图像上提取特征点之后,都要先用四叉树技术对这些特征点进行管理 //该类中定义了四叉树创建的函数以及树中结点的属性 //bool bNoMore: 根据该结点中被分配的特征点的数 ...
- hdu 4049 Tourism Planning [ 状压dp ]
传送门 Tourism Planning Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- BNUOJ 4358 左手定则 搜索
题目链接:http://acm.bnu.edu.cn/bnuoj/problem_show.php?pid=4358 一道很好的搜索题,要注意DFS函数的写法,特别是return的写法. View C ...
- LeetCode 558. 四叉树交集(递归)
1. 题目 四叉树是一种树数据,其中每个结点恰好有四个子结点:topLeft.topRight.bottomLeft 和 bottomRight.四叉树通常被用来划分一个二维空间,递归地将其细分为四个 ...
- LeetCode 427. 建立四叉树(递归)
1. 题目 我们想要使用一棵四叉树来储存一个 N x N 的布尔值网络.网络中每一格的值只会是真或假.树的根结点代表整个网络.对于每个结点, 它将被分等成四个孩子结点直到这个区域内的值都是相同的. 每 ...
最新文章
- iOS NSRunloop 详解
- 1 access中iif函数中的_JavaScript中的高阶函数
- jap页面使用ajax动态加载列表数据,JSF - 使用AJAX调用基于DataTable中的mimetype值加载不同形式...
- HDU - 6704 K-th occurrence (后缀数组+主席树)
- 使用活动记录执行CRUD
- html:(8):span标签和q标签
- 学校如何把表格里的成绩,让学生以二维码的方式去扫描查询呢?
- JS获取当前页面的URL参数
- 用计算机算e的平方为什么显示错误,计算器中出现的E是什么意思?
- Java POI word常用方法 在Cell插入子表格
- 人生不怕晚,就看敢不敢|优锘科技 X《无尽攀登》专场见面会
- 企业常见10个CRM问题答疑!
- SparkSQL ClickHouse RoaringBitmap使用实践
- 网页内嵌的视频添加 vtt 外挂字幕
- flask爱家租房项目开发(十二)
- 男孩子读博士的十大好处
- 关于python中面向对象(一)
- echarts年龄饼图_echarts饼图
- 模拟电子技术(二)基本放大电路
- MMFNet: A Multi-modality MRI Fusion Network for Segmentation of Nasopharyngeal Carcinoma
热门文章
- 操作 神通数据库_神通大型通用数据库
- 如何扒微信小程序源码
- android编程歌词显示,Android 音乐播放器实现歌词显示
- laravel使用irazasyed/laravel-gamp集成google analytics
- stm32 操作W25Q256 W25Q16 spi flash
- miRNA数据库篇——RNAcentral
- 空间数据格式转换之MapInfo mid/mif文件转ArcGIS shpfile文件
- 倾斜摄影模型(.osgb)中心点位置的确定方法(SuperMap idesktop)
- VS开发问题:应用程序无法启动 因为程序的并行配置不正确 ,解决方案
- 我的创作纪念日 | 软件测试成长之路