对于这道题目来说的话,我们的思路是这样的,我们首先把数据读进来,然后把color数组清零。

我们的思路是这样的的,给每一个房间设置一个对应的color数组,然后color数组里面填满不同的数字,每一种数字都代表着一种联通的房间。

相互联通房间里面,对应的color数组填的就是相同的数字,然后对每个房间计数,然后比较之后得出最大的计数值就行了。

那我么怎么对这房间里面填不同的数字呢?

那就用深搜进行图的遍历就行了。

我们使用for循环对整个读入的rooms数组进行遍历,如果它对应的color格子不为零的话,我们就不进行DFS搜索,如果为零的话就说明它目前还是一个单独的单元格,因为我们在DFS的过程中是要修改对应的color值的。

对于DFS的话,就是DFS遍历的格式,如果是旧节点的话,我们就return ;

如果是不是的话我们,就进行染色,也就是相对应的写入color数组值,在这里面的话我们顺便进行一下,该联通空间的大小计数,每次进入for循环,if判断条件为真的话,我们就将roomArea清零,然后才进入深搜计数。

roomArea操作完之后,是要先将roomNum++的,这对应这不同的联通图。

DFS里面染色之后,就是深搜的方向了,题目中给的深搜方向是很方便的,我们对于给出的数字进行 1 2 4 8 的与运算,如果是零,就说明这地方没有砖,我们就可以直接深搜这个方向就可以了。

对于二进制来说 0001 是1 ,0010 是2, 0100 是4 ,1000 是8 。

#include <iostream>
#include <stack>
#include <cstring>
using namespace std;
int rooms[60][60],color[60][60];
int maxRoomArea=0,roomNum=0;
int roomArea; void Dfs(int i,int k)
{
if (color[i][k]!=0) {
return ;
}
roomArea++;
color[i][k]=roomNum;
if ((rooms[i][k]&1)==0) Dfs(i,k-1);
if ((rooms[i][k]&2)==0) Dfs(i-1,k);
if ((rooms[i][k]&4)==0) Dfs(i,k+1);
if ((rooms[i][k]&8)==0) Dfs(i+1,k);
} int main()
{
int R,C;
cin>>R>>C;
for (int i=1;i<=R;i++) {
for (int j=1;j<=C;j++) {
cin>>rooms[i][j];
}
}
memset(color,0,sizeof(color));
for (int i=1;i<=R;i++) {
for (int k=1;k<=C;k++) {
if (!color[i][k]) {
roomNum++;
roomArea=0;
Dfs(i,k);
maxRoomArea=max(roomArea,maxRoomArea);
}
}
}
cout<<roomNum<<endl
<<maxRoomArea<<endl;
return 0;
}

Openjudge-2815-城堡问题的更多相关文章

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

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

  2. 百练oj 2815:城堡问题(dfs)

    传送门: http://bailian.openjudge.cn/practice/2815 2815:城堡问题 查看 提交 统计 提示 提问 总时间限制: 1000ms 内存限制: 65536kB ...

  3. OpenJ_Bailian 2815 城堡问题(DFS)

    题目传送门OpenJ_Bailian 2815 描述 1 2 3 4 5 6 7 ############################# 1 # | # | # | | # #####---### ...

  4. 百练2815:城堡问题(DFS)

    描述 1 2 3 4 5 6 7 ############################# 1 # | # | # | | # #####---#####---#---#####---# 2 # # ...

  5. 深度优先搜索入门:POJ1164城堡问题(递归、用栈模拟递归)

    将问题的各状态之间的转移关系描述为一个图,则深度优先搜索遍历整个图的框架为:Dfs(v) {if( v 访问过)return;将v标记为访问过;对和v相邻的每个点u: Dfs(u);}int main ...

  6. castle problem——(深度优先搜索,递归实现和stack实现)

    将问题的各状态之间的转移关系描述为一个图,则深度优先搜索遍历整个图的框架为:Dfs(v) {if( v 访问过)return;将v标记为访问过;对和v相邻的每个点u: Dfs(u);}int main ...

  7. ACM北大暑期课培训第三天

    今天讲的内容是深搜和广搜 深搜(DFS) 从起点出发,走过的点要做标记,发现有没走过的点,就随意挑一个往前走,走不 了就回退,此种路径搜索策略就称为“深度优先搜索”,简称“深搜”. bool Dfs( ...

  8. DFS之城堡问题

    2019-06-01 17:54:51 坚持!! 题目链接: http://bailian.openjudge.cn/practice/2815 #include <bits/stdc++.h& ...

  9. 【OpenJudge 8463】Stupid cat & Doge

    http://noi.openjudge.cn/ch0204/8463/ 挺恶心的一道简单分治. 一开始准备非递归. 大if判断,后来发现代码量过长,决定大打表判断后继情况,后来发现序号不对称. 最后 ...

  10. 【OpenJudge 191】【POJ 1189】钉子和小球

    http://noi.openjudge.cn/ch0405/191/ http://poj.org/problem?id=1189 一开始忘了\(2^{50}\)没超long long差点写高精度Q ...

随机推荐

  1. SVG新手入门

    特点 矢量图 属性:形状的参数(都没有单位) 添加事件跟html一样 修改样式跟html一样 属性操作: setAttribute/getAttribute 图形 <svg width=&quo ...

  2. (六)SpringBoot整合Swagger2框架

    一:什么是Swagger Swagger是一款通过我们添加的注解来对方法进行说明,来自动生成项目的在线api接口文档的web服务. 二:添加Swagger2依赖 <dependency> ...

  3. Spring自动扫描注解类的冲突问题

    原文地址:http://www.blogjava.net/crazycy/archive/2014/07/12/415738.html Spring MVC项目中通常会有二个配置文件,spring-s ...

  4. Kruskal HDOJ 1233 还是畅通工程

    题目传送门 /* 最小生成树之kruskal算法--并查集(数据结构)实现 建立一个结构体,记录两点和它们的距离,依照距离升序排序 不连通就累加距离,即为最小生成树的长度 */ #include &l ...

  5. linux系统文件目录解析

    /bin 二进制可执行命令  /dev 设备文件(硬盘/光驱等)  /etc 系统管理和配置文件  /etc/rc.d 启动的配置文件和脚本  /home 用户主目录,下面会有以登录用户名作为文件夹名 ...

  6. h5-18-文件操作-兼容判断

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. eclipse 当安装jad仍然不能反编译,提示attach source的时候

    当安装jad仍然不能反编译,提示attach source的时候,其实是当前workspace有问题了: 所使用的workspace目录下.metadata\.mylyn会出现一个.tasks.xml ...

  8. QQ面板拖拽(慕课网DOM事件探秘)(下)

    2.鼠标事件坐标获取 function fnDown(event) { var event = event || window.event; var oDrag = document.getEleme ...

  9. MSDN值得学习的地方

    作者:朱金灿 来源:http://blog.csdn.net/clever101 我一直认为:如果你没有乔布斯那样的天才,能够从头脑中原创出好产品,那么最好先学习分析好的产品,它到底好在哪里?哪些地方 ...

  10. iOS 使用UIBezierPath和CAShapeLayer画各种图形

    CAShapeLayer 是 CALayer 的子类,但是比 CALayer 更灵活,可以画出各种图形,当然,你也可以使用其他方式来画,随你. 杂谈 在 CAShapeLayer 中,也可以像 CAL ...