NoiOpenJudge 2.5 城堡问题
2016-12-09 22:09
591 查看
总时间限制: 1000ms 内存限制: 65536kB
描述
# = Wall
| = No wall
- = No wall
图1是一个城堡的地形图。请你编写一个程序,计算城堡一共有多少房间,最大的房间有多大。城堡被分割成mn(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 2 3 4 5 6 7 ############################# # | # | # | | # #####---#####---#---#####---# # # | # # # # # #---#####---#####---#####---# # | | # # # # # #---#########---#####---#---# # # | | | | # # ############################# (图 1)
# = Wall
| = No wall
- = No wall
图1是一个城堡的地形图。请你编写一个程序,计算城堡一共有多少房间,最大的房间有多大。城堡被分割成mn(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
#include <iostream> #include <memory.h> using namespace std; int a[1005][1005],n,m,room,block,maxblock,dx[8]={2,0,-2,0},dy[8]={0,2,0,-2}; void dfs(int x,int y) { int i,tx,ty; for(i=0;i<=7;i++) { tx=x+dx[i]; ty=y+dy[i]; if (tx>0&&tx<=2*n&&ty>0&&ty<=2*m&&a[tx][ty]==0&&a[x+dx[i]/2][y+dy[i]/2]==0) { block++; a[tx][ty]=1; a[x+dx[i]/2][y+dy[i]/2]=1; dfs(tx,ty); } } } int main() { int i,k,j; cin>>n>>m; memset(a,0,sizeof(a)); for(i=0;i<=2*n;i++) { a[i][0]=1; a[i][2*m]=1; } for(i=0;i<=2*m;i++) { a[0][i]=1; a[2*n][i]=1; } for(i=1;i<=2*n;i=i+2) for(j=1;j<=2*m;j=j+2) { cin>>k; if(k>=8) { a[i+1][j]=1; k-=8; } if(k>=4) { a[i][j+1]=1; k-=4; } if(k>=2) { a[i-1][j]=1; k-=2; } if(k>=1) a[i][j-1]=1; } for(i=1;i<=2*n;i=i+2) for(j=1;j<=2*m;j=j+2) if(a[i][j]==0) { block=1; room++; a[i][j]=1; dfs(i,j); if(block>maxblock)maxblock=block; } cout<<room<<endl<<maxblock<<endl; }
相关文章推荐
- OpenJudge 2.5-1817&&166 城堡问题(The Castle)
- NoiOpenJudge 2.5 红与黑
- 【搜索】 noi openjudge 2.5 拯救行动
- 【DP背包问题1】 noi openjudge 2.6 采药
- OPENJUDGE 2815 城堡问题
- 【搜索】—深搜遍历 noi openjudge 2.5 A Knight's Journey
- 【搜索】noi openjudge 2.5 单词接龙
- OpenJudge 2815 城堡问题 / Poj 1164 The Castle
- NoiOpenJudge 2.5 马走日
- NOI.openjudge 2.1 算数枚举 7647 easy的余数相同问题
- 【搜索】— 广搜队列 noi openjudge 2.5 Dungeon Master
- OpenJudge(2815)——城堡问题
- OpenJudge - 2815:城堡问题
- openjudge城堡问题
- NoiOpenJudge 2.5 Lake Counting
- NoiOpenJudge 2.5 献给阿尔吉侬的花束
- 【DP经典】noi openjudge 2.6 最长上升子序列
- noi.openjudge.cn 题目用到的头文件
- Open Judge 2811 熄灯问题
- OpenJudge_P7625 三角形最佳路径问题(DP)