The Castle
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 6677   Accepted: 3767

Description

     1   2   3   4   5   6   7  

   #############################

 1 #   |   #   |   #   |   |   #

   #####---#####---#---#####---#

 2 #   #   |   #   #   #   #   #

   #---#####---#####---#####---#

 3 #   |   |   #   #   #   #   #

   #---#########---#####---#---#

 4 #   #   |   |   |   |   #   #

   #############################

(Figure 1)

#  = Wall   

|  = No wall

-  = No wall

Figure 1 shows the map of a castle.Write a program that calculates 

1. how many rooms the castle has 

2. how big the largest room is 

The castle is divided into m * n (m<=50, n<=50) square modules. Each such module can have between zero and four walls. 

Input

Your program is to read from standard input. The first line contains the number of modules in the north-south direction and the number of modules in the east-west direction. In the following lines each module is described by a number (0 <= p <= 15). This number
is the sum of: 1 (= wall to the west), 2 (= wall to the north), 4 (= wall to the east), 8 (= wall to the south). Inner walls are defined twice; a wall to the south in module 1,1 is also indicated as a wall to the north in module 2,1. The castle always has
at least two rooms.

Output

Your program is to write to standard output: First the number of rooms, then the area of the largest room (counted in modules).

Sample Input

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

Sample Output

5
9

题意是一个城堡分成了m*n个块,然后给出了每个块一个数字,这个数字代表门的情况,如果这个块西面有门,那么1就要加到这个数字中。如果这个块北面有门,那么2就要加到这个数字中。如果这个块东面有门,那么4就要加到这个数字中。如果这个块南面有门,那么8就加到这个数字中。

所以就可以使用这个数&1 &2 &4 &8来判断哪一个方向有门,连通着的算一个房间,要求的是房间的数量和最大房间的块数。

应该算是深度搜索的模板题了吧。

代码:

#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <string>
#include <cstring>
#pragma warning(disable:4996)
using namespace std; int row,col,i,j,sum,result1,result2;
int value[70][70];
int color[70][70]; int move_x[5]={1,0,-1,0};
int move_y[5]={0,1,0,-1}; void dfs(int a,int b)
{
color[a][b]=1;
sum++;
int a_x,b_x; if((value[a][b]&1)==0)
{
a_x=a+move_x[3];
b_x=b+move_y[3];
if(a>=1 && a<=row && b>=1 && b<=col && color[a_x][b_x]==0)
{
dfs(a_x,b_x);
}
}
if((value[a][b]&2)==0)
{
a_x=a+move_x[2];
b_x=b+move_y[2];
if(a>=1 && a<=row && b>=1 && b<=col && color[a_x][b_x]==0)
{
dfs(a_x,b_x);
}
}
if((value[a][b]&4)==0)
{
a_x=a+move_x[1];
b_x=b+move_y[1];
if(a>=1 && a<=row && b>=1 && b<=col && color[a_x][b_x]==0)
{
dfs(a_x,b_x);
}
}
if((value[a][b]&8)==0)
{
a_x=a+move_x[0];
b_x=b+move_y[0];
if(a>=1 && a<=row && b>=1 && b<=col && color[a_x][b_x]==0)
{
dfs(a_x,b_x);
}
} } int main()
{
memset(color,0,sizeof(color)); cin>>row>>col;
for(i=1;i<=row;i++)
{
for(j=1;j<=col;j++)
{
cin>>value[i][j];
}
}
result1=0;
result2=0;
for(i=1;i<=row;i++)
{
for(j=1;j<=col;j++)
{
sum=0;
if(color[i][j]==0)
{
dfs(i,j);
result2++;
}
result1=max(sum,result1);
}
} cout<<result2<<endl;
cout<<result1<<endl;
return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

POJ 1164:The Castle的更多相关文章

  1. [POJ]1164 The Castle

    //markdown复制进来一堆问题 还是链接方便点 POJ 1164 The Castle 首先想到用9个方格来表示一个房间,如此一来复杂许多,MLE代码如下: //Writer:GhostCai ...

  2. POJ 3321:Apple Tree + HDU 3887:Counting Offspring(DFS序+树状数组)

    http://poj.org/problem?id=3321 http://acm.hdu.edu.cn/showproblem.php?pid=3887 POJ 3321: 题意:给出一棵根节点为1 ...

  3. POJ 3252:Round Numbers

    POJ 3252:Round Numbers Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10099 Accepted: 36 ...

  4. OpenJudge 2815 城堡问题 / Poj 1164 The Castle

    1.链接地址: http://bailian.openjudge.cn/practice/2815/ http://poj.org/problem?id=1164 2.题目: 总时间限制: 1000m ...

  5. POJ 1459:Power Network(最大流)

    http://poj.org/problem?id=1459 题意:有np个发电站,nc个消费者,m条边,边有容量限制,发电站有产能上限,消费者有需求上限问最大流量. 思路:S和发电站相连,边权是产能 ...

  6. POJ 3436:ACM Computer Factory(最大流记录路径)

    http://poj.org/problem?id=3436 题意:题意很难懂.给出P N.接下来N行代表N个机器,每一行有2*P+1个数字 第一个数代表容量,第2~P+1个数代表输入,第P+2到2* ...

  7. POJ 2195:Going Home(最小费用最大流)

    http://poj.org/problem?id=2195 题意:有一个地图里面有N个人和N个家,每走一格的花费是1,问让这N个人分别到这N个家的最小花费是多少. 思路:通过这个题目学了最小费用最大 ...

  8. POJ 3281:Dining(最大流)

    http://poj.org/problem?id=3281 题意:有n头牛,f种食物,d种饮料,每头牛有fnum种喜欢的食物,dnum种喜欢的饮料,每种食物如果给一头牛吃了,那么另一个牛就不能吃这种 ...

  9. POJ 1113:Wall

    原文链接:https://www.dreamwings.cn/poj1113/2832.html Wall Time Limit: 1000MS   Memory Limit: 10000K Tota ...

随机推荐

  1. 51nod 1445:变色DNA 最短路变形

    1445 变色DNA 题目来源: TopCoder 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 有一只特别的狼,它在每个夜晚会进行变色,研究发现 ...

  2. 如何使用linux查看tomcat日志

  3. WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! 的解决办法

    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ WARNING: REMOTE HOST IDENTIFICATION HAS ...

  4. 向量容器vector操作

    1.向量容器vector 1.1 vector说明 进行vector操作前应添加头文件#include<vector>: vector是向量类型,可以容纳许多类型的数据,因此也被称为容器: ...

  5. 005.Oracle数据库 , 查询多字段连接合并,并添加文本内容

    /*Oracle数据库查询日期在两者之间*/ SELECT PKID , OCCUR_DATE, PKID || ' 曾经沧海难为水 ' ||TO_CHAR( OCCUR_DATE, ' yyyy/m ...

  6. Centos7安装mysql5.7.21

    1.卸载系统自带的 MariaDB [root@CentOS ~]# rpm -qa | grep mariadb mariadb-libs--.el7.x86_64 [root@CentOS ~]# ...

  7. Nature

    1.主干 (1)<河图+洛书>:启发伏羲作八卦. (2)<三坟+五典>:失传:伏羲.神农.轩辕.少昊.颛顼.帝喾.唐尧.虞舜. (3)<八索+九丘>:失传:八卦之书 ...

  8. P1045 快速排序

    P1045 快速排序 转跳点:

  9. Hibernate--起步

    1.配置对象 配置对象是你在任何 Hibernate 应用程序中创造的第一个 Hibernate 对象,并且经常只在应用程序初始化期间创造.它代表了 Hibernate 所需一个配置或属性文件.配置对 ...

  10. 117-PHP在外部无法调用private类成员函数

    <?php class ren{ //定义人类 public function walk(){ //定义public成员方法 echo '我会走路.'; } private function d ...