点击打开题目链接

建树+广搜一棵树;最下面有更短代码(很巧妙)。

 #include<iostream>
#include<stdio.h>
#include<queue>
#include<string.h>
#include<algorithm> using namespace std; int maze[][];
struct node
{
int num;
node *next[];
};
void init_tree(node *root)
{
int i;
for(i=; i<; i++)
root->next[i] = NULL;
}
void built(int istart,int iend,int jstart,int jend,node *root)
{
int dive,i,j;
int istart1=istart,iend1=iend,jstart1=jstart,jend1=jend;
for(dive=; dive<; dive++)
{
if(dive==) istart=istart1,iend=istart1+(iend1-istart1+)/-,jstart=jstart1,jend=jstart1+(jend1-jstart1+)/-;
else if(dive==) istart=istart1,iend=istart1+(iend1-istart1+)/-,jstart=jstart1+(jend1-jstart1+)/,jend=jend1;
else if(dive==) istart=istart1+(iend1-istart1+)/,iend=iend1,jstart=jstart1,jend=jstart1+(jend1-jstart1+)/-;
else istart=istart1+(iend1-istart1+)/,iend=iend1,jstart=jstart1+(jend1-jstart1+)/,jend=jend1;
int flag0=,flag1=,tree_point;
for(i=istart; i<=iend; i++)
{
for(j=jstart; j<=jend; j++)
{
if(maze[i][j]==) flag0=;
if(maze[i][j]==) flag1=;
}
}
if(flag0&&flag1) tree_point=;
else if(flag0&&!flag1) tree_point=;
else if(!flag0&&flag1) tree_point=;
node *p;
p=new node;
init_tree(p);
root->next[dive]=p;
p->num=tree_point;
if(tree_point==||tree_point==) continue ;
built(istart,iend,jstart,jend,p);
}
}
void print(node *root)
{
node *ss,*tt;
queue<node*>q;
q.push(root);
while(!q.empty())
{
ss=q.front();
int su=ss->num;
if(su==) printf("");
else if(su==) printf("");
else if(su==) printf("");
q.pop();
for(int i=; i<; i++)
{
if(ss->next[i] !=NULL)
{
tt=ss->next[i];
q.push(tt);
}
}
}
printf("\n");
}
int check_map(int n)
{
int i,j,sum=;
for(i=; i<=n; i++)
for(j=; j<=n; j++)
sum+=maze[i][j];
if(sum==n*n) return ;
else if(sum==) return ;
else return -;
}
void delete_tree(node *root)
{
int i;
for(i=; i<; i++)
{
if(root->next[i]!=NULL)
{
delete_tree(root->next[i]);
}
}
delete root;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int i,j;
memset(maze,,sizeof(maze));
for(i=; i<=n; i++)
{
for(j=; j<=n; j++)
scanf("%d",&maze[i][j]);
}
int ans=check_map(n);
if(ans==) printf("00\n");
else if(ans==) printf("01\n");
else
{
node *tree;
tree=new node;
init_tree(tree);
tree->num=;
built(,n,,n,tree);
print(tree);
delete_tree(tree);
}
}
return ;
}

短代码:

 #include <cstring>
#include <vector>
#include<stack>
#include<queue>
#include<cmath>
#include<algorithm>
#include<iostream>
#include<cstring>
//#define N 10005
using namespace std;
int zu[][],n;
struct sb
{
int x,y,x1,y1;
bool Get()
{
int ans=;
for(int i=x;i<=x1;i++)
for(int j=y;j<=y1;j++)
ans+=zu[i][j];
if(!ans)
return true;
if(ans==(x1-x+)*(y1-y+))
return true;
return false;
}
};
int main()
{
while(scanf("%d",&n)==)
{
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
scanf("%d",&zu[i][j]);
//
sb s1,s2;
s1.x=;
s1.y=;
s1.x1=n;
s1.y1=n;
queue<sb>Q;
Q.push(s1);
while(!Q.empty())
{
s1=Q.front();
Q.pop();
if(s1.Get())
{
printf("0%d",zu[s1.x1][s1.y1]);
continue;
}
printf("");
int xx=(s1.x+s1.x1)/;
int yy=(s1.y+s1.y1)/;
s2=s1;
s2.y1=yy;
s2.x1=xx;
Q.push(s2);
//
s2=s1;
s2.x1=xx;
s2.y=yy+;
Q.push(s2);
//
s2=s1;
s2.x=xx+;
s2.y1=yy;
Q.push(s2);
//
s2=s1;
s2.x=xx+;
s2.y=yy+;
Q.push(s2);
}
printf("\n");
}
}

四叉树 bnuoj的更多相关文章

  1. BNUOJ 4049 四叉树

    四叉树 Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld      Java class name: Ma ...

  2. 地图四叉树一般用在GIS中,在游戏寻路中2D游戏中一般用2维数组就够了

    地图四叉树一般用在GIS中,在游戏寻路中2D游戏中一般用2维数组就够了 四叉树对于区域查询,效率比较高. 原理图

  3. HTML5实现3D和2D可视化QuadTree四叉树碰撞检测

    QuadTree四叉树顾名思义就是树状的数据结构,其每个节点有四个孩子节点,可将二维平面递归分割子区域.QuadTree常用于空间数据库索引,3D的椎体可见区域裁剪,甚至图片分析处理,我们今天介绍的是 ...

  4. HT for Web可视化QuadTree四叉树碰撞检测

    QuadTree四叉树顾名思义就是树状的数据结构,其每个节点有四个孩子节点,可将二维平面递归分割子区域.QuadTree常用于空间数据库索引,3D的椎体可见区域裁剪,甚至图片分析处理,我们今天介绍的是 ...

  5. BNUOJ 52325 Increasing or Decreasing 数位dp

    传送门:BNUOJ 52325 Increasing or Decreasing题意:求[l,r]非递增和非递减序列的个数思路:数位dp,dp[pos][pre][status] pos:处理到第几位 ...

  6. bnuoj 24251 Counting Pair

    一道简单的规律题,画出二维表将数字分别相加可以发现很明显的对称性 题目链接:http://www.bnuoj.com/v3/problem_show.php?pid=24251 #include< ...

  7. [转]一个四叉树Demo学习

    程序代码: http://www.codeproject.com/Articles/30535/A-Simple-QuadTree-Implementation-in-C 四叉树: using Sys ...

  8. [转]基于四叉树(QuadTree)的LOD地形实现

    实现基于四叉树的LOD地形时,我遇到的主要问题是如何修补地形裂缝. 本段我将描述使用LOD地形的优势,我实现LOD地形的思路,实现LOD地形核心模块的详细过程,以及修补地形裂缝的思路. 首先,LOD地 ...

  9. 线性四叉树十进制Morton码计算示例

    线性四叉树十进制Morton码计算,具体算法描述龚健雅<地理信息系统基础>P108

随机推荐

  1. 关于MySQL的事务处理及隔离级别

    原文地址 :http://blog.sina.com.cn/s/blog_4c197d420101awhc.html 事务是DBMS得执行单位.它由有限得数据库操作序列组成得.但不是任意得数据库操作序 ...

  2. 快速掌握RabbitMQ(三)——消息确认、持久化、优先级的C#实现

    1 消息确认 在一些场合,如转账.付费时每一条消息都必须保证成功的被处理.AMQP是金融级的消息队列协议,有很高的可靠性,这里介绍在使用RabbitMQ时怎么保证消息被成功处理的.消息确认可以分为两种 ...

  3. java基础之IO流(一)字节流

    java基础之IO流(一)之字节流 IO流体系太大,涉及到的各种流对象,我觉得很有必要总结一下. 那什么是IO流,IO代表Input.Output,而流就是原始数据源与目标媒介的数据传输的一种抽象.典 ...

  4. Mysql导出导入相关操作记录

    一.使用source source sql脚本文件路径 二.使用mysqldump 命令行下具体用法如下:  mysqldump -u用户名 -p密码 -d 数据库名 表名 脚本名; 1.导出数据库為 ...

  5. python requests接收chunked编码问题-python源码修改

    python requests接收chunked编码问题-python源码修改 学习了:https://blog.csdn.net/wangzuxi/article/details/40377467

  6. 标C编程笔记day04 预处理、宏定义、条件编译、makefile、结构体使用

    预处理:也就是包括须要的头文件,用#include<标准头文件>或#include "自己定义的头文件" 宏定义,如:#define PI 3.1415926 查看用宏 ...

  7. PHP开发的一些趣事

    配置运行环境studyPhp: http://www.phpstudy.net/phpstudy/PhpStudy20180211.zip PHP运行环境:5.4 首先做的是一个表单测试吧 <! ...

  8. UVa 12377 - Number Coding

    题目:一个数能够用一种素数元素的个数表示的形式,43560=23×32×51×112表示成41223: 第一个数是素因子的种类,第二个是每一个素因子的个数递增排列.给你一个这样的形式的串, 问原来的数 ...

  9. addEventListener event

    addEventListener   先看个例子: document.getElementById("myBtn").addEventListener("click&qu ...

  10. 王立平--Unity破解

    1.下载破解工具.关闭Unity,打开破解工具 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzQyNTUyNw==/font/5a6L5L2T/ ...