对于这道题目来说的话,我们的思路是这样的,我们首先把数据读进来,然后把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. 洛谷 - P2602 - 数字计数 - 数位dp

    https://www.luogu.org/problemnew/show/P2602 第二道数位dp,因为“数位dp都是模板题”(误),所以是从第一道的基础上面改的. 核心思想就是分类讨论,分不同情 ...

  2. mysqldump 工具使用详解——参数选项

    mysqldump 简介 mysqldump 是一种用于逻辑备份的客户端工具,它会产生一套能够重新构建数据库或表的SQL语句.所谓逻辑备份:是利用SQL语言从数据库中抽取数据并存于二进制文件的过程.逻 ...

  3. 第一篇 .NET高级技术之索引器

    基础知识补充 索引 器 没有名字 ,索引器的内部本质 (ILSpy的IL模式下看)类型 this[参数]{get;set;} 可以是只读或者只写(在get或者set前加上private) 字符串是只读 ...

  4. tuple的用法,set的用法

    项目中需要遍历tuple,而tuple的元素也是tuple,这样就会出现一些问题 当有多个元素的时候并没有问题,比如 tuple1 = ((1,2),(1,2)) for first, second ...

  5. C# ref和out传递参数总结

    如有雷同,不胜荣幸,若转载,请注明 C#中ref和out传递参数总结,两个都可用来传递参数,ref使用时必须先进行初始化,out则不需要,只要在返回之前赋值即可,文字废话到此,下面直接上例子 ref例 ...

  6. Hexo瞎折腾系列(1) - 准备工作与简单美化

    前言 网上有不少相关的帖子,不过版本会比较旧,而不同版本可能存在代码不同的问题,不过大部分还是大同小异,本系列就不啰嗦重复了,基本只会按照本人所使用的版本以及个人所使用到的内容来进行介绍. 该系列是对 ...

  7. AtCoder Grand Contest 016 E - Poor Turkeys

    题目传送门:https://agc016.contest.atcoder.jp/tasks/agc016_e 题目大意: 有\(N\)只火鸡,现有\(M\)个人,每个人指定了两只火鸡\(x,y\),每 ...

  8. 并查集 HDOJ 5441 Travel

    题目传送门 题意:给一张无向图,问存在多少(a, b)表示a点到b点经过的边值小于等于x ((a,b) 和 (b, a)属于不同的方案) 分析:首先将边权值和查询x值升序排序,从前往后扫描边,累加从u ...

  9. vs2013转为vs2010项目

    1.首先用记事本之类的工具打开.sln文件 打开后会看到如下信息 Format Version 12.00 就是指VS2013 VisualStudioVersion = 12.0.21005.1 指 ...

  10. Java GUI 基础组件

    1.JLabel  标签 构造函数: JLabel() JLabel(String text) JLabel(String text,int align)     //第二个参数设置文本的对齐方式,常 ...