描述

1   2   3   4   5   6   7
#############################
1 # | # | # | | #
#####---#####---#---#####---#
2 # # | # # # # #
#---#####---#####---#####---#
3 # | | # # # # #
#---#########---#####---#---#
4 # # | | | | # #
#############################
(图 1) # = Wall
| = No wall
- = No wall
   图1是一个城堡的地形图。请你编写一个程序,计算城堡一共有多少房间,最大的房间有多大。城堡被分割成mn(m≤50,n≤50)个方块,每个方块可以有0~4面墙。

输入

程序从标准输入设备读入数据。第一行是两个整数,分别是南北向、东西向的方块数。在接下来的输入行里,每个方块用一个数字(0≤p≤50)描述。用一个数字表示方块周围的墙,1表示西墙,2表示北墙,4表示东墙,8表示南墙。每个方块用代表其周围墙的数字之和表示。城堡的内墙被计算两次,方块(1,1)的南墙同时也是方块(2,1)的北墙。输入的数据保证城堡至少有两个房间。

输出城堡的房间数、城堡中最大房间所包括的方块数。结果显示在标准输出设备上。
样例输入4

7

11 6 11 6 3 10 6

7 9 6 13 5 15 5

1 10 12 7 13 7 5

13 11 10 8 10 12 13 样例输出5

9

这道题刚开始看的时候,我震惊了,这个怎么用搜索模呀!首先城堡的墙不是用图形给出;其次,怎么将其转换为图像。

其实不用害怕,有些事情换个方向想就可以解决,看看上面的图像,我们为什么不试着去转换呢?

抱着这个想法,我试着转换了一下,结果一次AC。

代码如下:

<span style="font-size:12px;BACKGROUND-COLOR: #ffff99">#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
using namespace std;
int a[103][103],m,n,k,sum,w[4]={1,-1,0,0},u[4]={0,0,-1,1},s;
void find(int p,int q)
{
int x,y,h[10001][2],t=0,z=1,i;
h[1][0]=p;
h[1][1]=q;
do
{
t++;
for(i=0;i<4;i++)
{
x=h[t][0]+w[i];
y=h[t][1]+u[i];
if(x>=1&&x<m*2+1&&y>=1&&y<n*2+1&&a[x][y]!=-1&&x+w[i]>=1&&x+w[i]<m*2+1&&y+u[i]>=1&&y+u[i]<n*2+1&&a[x+w[i]][y+u[i]]!=-1)
{
z++;
h[z][0]=x+w[i];
h[z][1]=y+u[i];
a[h[z][0]][h[z][1]]=-1;
s++;
}
}
}while(t<z);
sum++;
return;
}
int main()
{
int i,j,p;
for(i=0;i<=102;i+=2)
for(j=0;j<=102;j+=2)
a[i][j]=-1;
scanf("%d%d",&m,&n);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{
scanf("%d",&p);
if(p>=8)
{
a[i*2+1+1][j*2+1]=-1;
p-=8;
}
if(p>=4)
{
a[i*2+1][j*2+1+1]=-1;
p-=4;
}
if(p>=2)
{
a[i*2+1-1][j*2+1]=-1;
p-=2;
}
if(p>=1)
{
a[i*2+1][j*2+1-1]=-1;
p-=1;
}
}
for(i=0;i<m;i++)
for(j=0;j<n;j++)
if(a[i*2+1][j*2+1]!=-1)
{
find(i*2+1,j*2+1);
if(s>k)
k=s;
s=0;
}
printf("%d\n%d",sum,k);
}</span>

其实也没这么难啦,有些事情只要肯尝试,成功很简单!

NOI2.5 1817:城堡问题的更多相关文章

  1. 搜索8--noi1817:城堡问题

    搜索8--noi1817:城堡问题 一.心得 1.这题只是在普通的迷宫的基础上面加上了墙的概念,所以基本的思路和代码就和普通的迷宫是一样的,只不过需要多加上一层墙的判断 2.这里墙的判断是用的二进制加 ...

  2. vijos1059 积木城堡[n年浙江省队第X轮](背包的方案总数 or 01背包)

    描述 XC的儿子小XC最喜欢玩的游戏用积木垒漂亮的城堡.城堡是用一些立方体的积木垒成的,城堡的每一层是一块积木.小XC是一个比他爸爸XC还聪明的孩子,他发现垒城堡的时候,如果下面的积木比上面的积木大, ...

  3. HDU1269 迷宫城堡

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

  4. HD1269迷宫城堡(有向图 && 划分连通块)

    迷宫城堡 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  5. bzoj 3399: [Usaco2009 Mar]Sand Castle城堡

    3399: [Usaco2009 Mar]Sand Castle城堡 Time Limit: 3 Sec  Memory Limit: 128 MB Description 约翰用沙子建了一座城堡.正 ...

  6. hdu 1269 迷宫城堡 强连通分量

    迷宫城堡 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  7. HDU1269 迷宫城堡(裸强连通分量)

    Description 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000),每个通道都是单向的,就是说若称某通道连通了A ...

  8. 洛谷P1457 城堡 The Castle

    P1457 城堡 The Castle 137通过 279提交 题目提供者该用户不存在 标签USACO 难度提高+/省选- 提交  讨论  题解 最新讨论 暂时没有讨论 题目描述 我们憨厚的USACO ...

  9. hdu 1269 迷宫城堡

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1269 迷宫城堡 Description 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个 ...

随机推荐

  1. 实现页面查看xml或json数据类似控制台效果

    在前端查看xml或者json数据时,实现在类似与控制台中console的效果. 配合Ant Design的Collapse折叠面板进行展示. Collapse组件的地址:https://ant.des ...

  2. [vue/no-parsing-error] Parsing error: x-invalid-end-tag.eslint-plugin-vue

    [vue/no-parsing-error] Parsing error: x-invalid-end-tag.eslint-plugin-vue   解决方案:vscode里面选择设置->搜索 ...

  3. Visual Studio Team Services使用教程【3】:默认团队权限说明

    2017.4.23之后建议朋友看下面的帖子 TFS2017 & VSTS 实战(繁体中文视频) Visual Studio Team Services(VSTS)与敏捷开发ALM实战关键报告( ...

  4. redis的事务操作

    事务是一个单独的隔离操作:事务中的所有命令都会序列化.按顺序地执行.事务在执行的过程中,不会被其他客户端发送来的命令请求所打断. 事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行. 一 ...

  5. Excel单元格的日常操作

    通过右键选择插入来移动单元格 灵活的运用"整行" 与 "整列" 选中区域之后 通过点击区域边框进行移动 按住shift之后框会变成线 更容易拖动 按住ctrl拖 ...

  6. The fifth day of Crawler learning

    使用mongoDB 下载地址:https://www.mongodb.com/dr/fastdl.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl ...

  7. 初入webpack

    为什么需要构建工具? 通过caniuse我们了解到 现代浏览器对es6特性的支持程度: 由于现代浏览器对es6特性的支持度并不能说太高,为了兼容所以需要进行 es6语法的转换,除了此,三大框架的语法特 ...

  8. 共识网络BFT-SMaRt:理论与实践

    目录 BFT-SMaRt 简介 分布式计数器服务 功能描述 组网配置 启动节点 常见问题 计数服务 容错服务 BFT-SMaRt 理论 BFT-SMR 典型模式 SMR 状态机复制 VP-Consen ...

  9. wrk性能测试(详解)

    一.简介 wrk 是一款针对 Http 协议的基准测试工具,它能够在单机多核 CPU 的条件下,使用系统自带的高性能 I/O 机制,如 epoll,kqueue 等,通过多线程和事件模式,对目标机器产 ...

  10. react项目使用antd

    在开始实践之前要确保搭建React单页面开发环境,如果还没有搭建好开发环境的朋友请移步到如何搭建React单页面开发环境. 首先在命令行模式下创建一个React项目(项目名使用小写字母命名):(win ...