zoj 1788 Quad Trees
先输入初始化MAP ,然后要根据MAP 建立一个四分树,自下而上建立,先建立完整的一棵树,然后根据四个相邻的格 值相同则进行合并,(这又是递归的伟大),逐次向上递归
四分树建立完后,再进行一深度优先遍历,生成二进制字符串,再转化为16进制输出
- //#include "stdafx.h"
- #include <string.h>
- #include <string>
- #include <queue>
- #include <iostream>
- #include "stdio.h"
- using namespace std;
- char MAP[512][512];
- class quadtree//结点
- {
- public:
- char value[3];// "00"->all 0 ,"01"->all 1,"1"->mixed
- quadtree*q[4];//four children
- quadtree()
- {
- q[0] = q[1] = q[2] = q[3] = 0;//initialize four children
- }
- bool operator == (const quadtree &p)const//运算符重载,
- {
- if (strcmp(value, "1") == 0 || strcmp(value, p.value) != 0)
- return 0;
- else
- return 1;
- }
- };
- quadtree * DFS(int r, int c, int s)//r ,c 坐标,s长度
- {
- int i; bool f = 1;
- quadtree*temp = new quadtree;
- if (s==1)//最小长度,每一个格
- {
- temp->value[0] = '0';
- temp->value[1] = MAP[r][c];
- temp->value[2] = 0;//串结束符号?
- return temp;
- }
- s /= 2;//四分
- temp->q[0] = DFS(r, c, s);
- temp->q[1] = DFS(r, c + s, s);
- temp->q[2] = DFS(r + s, c, s);
- temp->q[3] = DFS(r + s, c + s, s);
- for (i = 1; i < 4;i++)
- {
- if(!(*temp->q[0] == *temp->q[i]))//some of four children are different ,can not be merged
- {
- f = 0;
- break;
- }
- }
- if (f)//all children are same,merge
- {
- strcpy(temp->value, temp->q[0]->value);
- for (i = 0; i < 4; i++)
- {
- delete temp->q[i]; temp->q[i] = 0;//delete all children
- }
- }
- else// don't merge
- {
- strcpy(temp->value, "1");
- }
- return temp;
- }
- string BFS(quadtree*root)//广度遍历,生成二进制字符串
- {
- string s = "";
- quadtree *cur = root;
- queue <quadtree*> que;
- que.push(root);
- while (!que.empty())
- {
- cur = que.front();
- que.pop();
- s += cur->value;
- for (int i = 0; i < 4; i++)
- {
- if (cur->q[i]->value != NULL)//有子才放进去!!!!!!!
- que.push(cur->q[i]);
- }
- }
- return s;
- }
- //////////////////////////////////////////////
- //转化为16进制。。别人家的代码
- char tohex(const string& str)
- {
- int ret = 0;
- for (int i = 0; i < 4; i++)
- {
- ret <<= 1;//左移 实现16进制的转化
- if (str[i] == '1')
- ++ret;
- }
- return (ret < 10) ? '0' + ret : 'A' + ret - 10;
- }
- string ToHex(const string& str)
- {
- string tmp = str;
- string ret = "";
- while (tmp.length() % 4 != 0)
- tmp = "0" + tmp;
- for (size_t i = 0; i < tmp.length(); i += 4)
- ret += tohex(tmp.substr(i, 4));//substr 截取指定字符串,i为起始位置,4表示长度
- return ret;
- }
- ////这部分是别人家的 = =
- ///////////////////////////////////////////////////
- int main()
- {
- string al;
- int k, N;
- scanf("%d", &k);//输入test 次数
- while (k--)
- {
- scanf("%d", &N);
- for (int i = 0; i < N; i++)//输入矩阵大小
- {
- for (int j = 0; j < N; j++)
- {
- cin >> MAP[i][j];// scanf("%c", &MAP[i][j]);//initialize the array
- }
- }
- quadtree *root;
- root =DFS(0, 0, N);//build a quardtree;
- al = BFS(root);
- //cout << al << endl;
- cout << ToHex(al) << endl;
- }
- return 0;
- }
zoj 1788 Quad Trees的更多相关文章
- [LeetCode] Quad Tree Intersection 四叉树相交
A quadtree is a tree data in which each internal node has exactly four children: topLeft, topRight, ...
- [LeetCode] Construct Quad Tree 建立四叉树
We want to use quad trees to store an N x N boolean grid. Each cell in the grid can only be true or ...
- LeetCode 427 Construct Quad Tree 解题报告
题目要求 We want to use quad trees to store an N x N boolean grid. Each cell in the grid can only be tru ...
- [LeetCode&Python] Problem 427. Construct Quad Tree
We want to use quad trees to store an N x N boolean grid. Each cell in the grid can only be true or ...
- leetcode 427. Construct Quad Tree
We want to use quad trees to store an N x N boolean grid. Each cell in the grid can only be true or ...
- 【LeetCode】558. Quad Tree Intersection 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- 【LeetCode】427. Construct Quad Tree 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- “等一下,我碰!”——常见的2D碰撞检测
转自:https://aotu.io/notes/2017/02/16/2d-collision-detection/ 在 2D 环境下,常见的碰撞检测方法如下: 外接图形判别法 轴对称包围盒(Axi ...
- elasticsearch 口水篇(6) Mapping 定义索引
前面我们感觉ES就想是一个nosql数据库,支持Free Schema. 接触过Lucene.solr的同学这时可能会思考一个问题——怎么定义document中的field?store.index.a ...
随机推荐
- python学习笔记之基础一(第一天)
1. python字符介绍 在C语言中没有字符串,只有字符 在python中的字符串hello,在C语言中是以字符数组在内存存放['h','e','l','l','o'],如果对字符串修改,则是在内存 ...
- linux 时间管理——概念、注意点(一)【转】
转自:http://www.cnblogs.com/openix/p/3324243.html 参考:1.http://bbs.eyeler.com/thread-69-1-1.html ...
- jquery 获取元素背景图片backgroungImage的url
$("#").css("backgroundImage").replace('url(','').replace(')','');
- mysql connection refused
mysql数据库认证的时候和别的服务器不一样,即使mysqld数据库服务器没有启动,使用mysql这种客户端程序去连接,也要先输入密码,从而使人有一种错觉,以会服务器已经正常启动了.是不是密码或是主机 ...
- CSS3简单的小技巧:linear-gradient切角画册
关于linear-gradient的语法就不多做介绍了网上到处都是,下面看个小例 我们先做一个渐变,使其让他旋转, <div class="example"> < ...
- PB的datawindow导出到excel文件(使用saveasascii)
**********************************************************//*函数名称:uf_dwsaveas_excel功能:将数据窗口数据导出EXCEL ...
- boldSystemFontOfSize 和 systemFontOfSize 的区别
使用 UIFont 的下列方法: + systemFontOfSize + boldSystemFontOfSize + italicSystemFontOfSize p.p1 { margin: 0 ...
- 3d游戏模型及地形提取及导航
支持所有DirectX的游戏模型提取 有需要的可以直接联系我!QQ290387340
- SpringMVC生成Excel下载
SpringMVC controller里的方法: @RequestMapping(value="/notify/download",produces = {"appli ...
- 正确使用ng-if和ng-show
在使用bootstrap中,我们会经常用到按钮组,也就是btn-group,如果仔细观察的话,会发现一个按钮组的第一个和最后一个按钮分别是有圆角的,如下图: 但是中间的按钮是没有圆角的,这样显得比较美 ...