百练2815 城堡问题(DFS)
2015-07-21 22:54
253 查看
总时间限制:1000ms内存限制:65536kB
描述
图1是一个城堡的地形图。请你编写一个程序,计算城堡一共有多少房间,最大的房间有多大。城堡被分割成mn(m≤50,n≤50)个方块,每个方块可以有0~4面墙。
输入程序从标准输入设备读入数据。第一行是两个整数,分别是南北向、东西向的方块数。在接下来的输入行里,每个方块用一个数字(0≤p≤50)描述。用一个数字表示方块周围的墙,1表示西墙,2表示北墙,4表示东墙,8表示南墙。每个方块用代表其周围墙的数字之和表示。城堡的内墙被计算两次,方块(1,1)的南墙同时也是方块(2,1)的北墙。输入的数据保证城堡至少有两个房间。输出城堡的房间数、城堡中最大房间所包括的方块数。结果显示在标准输出设备上。
样例输入
样例输出
题目本身并不难,可以直接暴搜。但是他这里有一个处理,就是用数字表示了空格周围的墙。所以当我判断某一个方向是否有墙的时候,只要对应的进行&运算就行了。
#include<stdio.h>
#include<string.h>
#definemax(a,b)a>b?a:b
intn,m,map[60][60],color[60][60],room,area;
voiddfs(intx,inty)
{
if(color[x][y])return;
if(x<=0||y<=0||x>m||y>n)return;
color[x][y]=room;
area++;
if((map[x][y]&1)==0)dfs(x,y-1);
if((map[x][y]&2)==0)dfs(x-1,y);
if((map[x][y]&4)==0)dfs(x,y+1);
if((map[x][y]&8)==0)dfs(x+1,y);
}
intmain()
{
inti,j,k,maxiarea;
while(scanf("%d%d",&m,&n)!=EOF)
{
room=0;maxiarea=0;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
scanf("%d",&map[i][j]);
memset(color,0,sizeof(color));
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
{
if(!color[i][j]){
room++;area=0;
dfs(i,j);
maxiarea=max(maxiarea,area);
}
}
printf("%d\n%d\n",room,maxiarea);
}
return0;
}
描述
1234567 ############################# 1#|#|#||# #####---#####---#---#####---# 2##|##### #---#####---#####---#####---# 3#||##### #---#########---#####---#---# 4##||||## ############################# (图1) #=Wall |=Nowall -=Nowall
图1是一个城堡的地形图。请你编写一个程序,计算城堡一共有多少房间,最大的房间有多大。城堡被分割成mn(m≤50,n≤50)个方块,每个方块可以有0~4面墙。
输入程序从标准输入设备读入数据。第一行是两个整数,分别是南北向、东西向的方块数。在接下来的输入行里,每个方块用一个数字(0≤p≤50)描述。用一个数字表示方块周围的墙,1表示西墙,2表示北墙,4表示东墙,8表示南墙。每个方块用代表其周围墙的数字之和表示。城堡的内墙被计算两次,方块(1,1)的南墙同时也是方块(2,1)的北墙。输入的数据保证城堡至少有两个房间。输出城堡的房间数、城堡中最大房间所包括的方块数。结果显示在标准输出设备上。
样例输入
4 7 1161163106 796135155 1101271375 1311108101213
样例输出
5 9
题目本身并不难,可以直接暴搜。但是他这里有一个处理,就是用数字表示了空格周围的墙。所以当我判断某一个方向是否有墙的时候,只要对应的进行&运算就行了。
相关文章推荐
- 外部引用JavaScript文件乱码问题
- mac 制作 ios 的 usb 启动盘
- Russell's Paradox: Here's Why Maths Can't Have A Set Of Everything
- 阿里移动推荐算法比赛赛后总结--特征篇
- 汉字统计--统计给定文本文件中汉字的个数。
- 3. playbook基础组件
- 正则表达式---贪婪与非贪婪模式
- python系列------内存池
- 杭电2027统计元音
- linux静态库和动态库分析
- strcat()函数与strlen()函数与strcpy()的使用
- iOS编程:学习篇(七)
- JavaScript原型链问题
- [leedcode 108] Convert Sorted Array to Binary Search Tree
- GO语言练习:构建json 和 解析JSON 实例
- 阿里云服务器centos6安装vncserver
- 开源项目 AllJoyn 框架
- SQL学习第二天,在未学习过某些知识的情况下把静态的代码操作改为对数据库的操作
- HDU 1020 Encoding
- MySQL执行存储过程权限