2815:城堡问题

转载请注明出处:http://www.cnblogs.com/zhishoumuguinian/p/8413547.html

2815:城堡问题

总时间限制: 1000ms 内存限制: 65536kB

    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

 

 

 

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 int a[100][100];//存储房间信息
 5 int color[100][100]={0};//对遍历过的房间进行染色
 6 int numroom=0, maxarea=0;//房间数目和最大房间面积
 7 int  roomarea;//房间面积
 8 void dfs(int x, int y)
 9 {
10     if(color[x][y]!=0) return;//如果访问过,直接返回
11     color[x][y]=numroom;//对当前方格染色当前房间编号的色
12     roomarea++;//如果没访问过,房间面积加一
13     if((a[x][y]&1)==0) dfs(x,y-1);//西边没墙,向西深搜
14     if((a[x][y]&2)==0) dfs(x-1,y);//与上个语句相似
15     if((a[x][y]&4)==0) dfs(x,y+1);
16     if((a[x][y]&8)==0) dfs(x+1,y);
17 }
18 
19 int main()
20 {
21     int n,m;
22     cin>>n>>m;
23     for(int i=0; i<n; i++)
24     {
25         for(int j=0; j<m; j++)
26         {
27             cin>>a[i][j];
28         }
29     }//读入房间信息
30     for(int i=0; i<n; i++)//对所有方格进行遍历
31     {
32         for(int j=0; j<m; j++)
33         {
34             if(color[i][j]==0)//如果方格没有访问过,那么就是一个新的房间开始
35             {
36              numroom++;
37             roomarea=0;
38             dfs(i,j);
39             maxarea=max(maxarea,roomarea);
40             }
41         
42         }
43     }
44     cout<<numroom<<endl<<maxarea;
45 }

 

posted @ 2018-02-04 16:47  nefuer  阅读(127)  评论(0编辑  收藏  举报