Openjudge-2815-城堡问题
对于这道题目来说的话,我们的思路是这样的,我们首先把数据读进来,然后把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-城堡问题的更多相关文章
- OpenJudge 2815 城堡问题 / Poj 1164 The Castle
1.链接地址: http://bailian.openjudge.cn/practice/2815/ http://poj.org/problem?id=1164 2.题目: 总时间限制: 1000m ...
- 百练oj 2815:城堡问题(dfs)
传送门: http://bailian.openjudge.cn/practice/2815 2815:城堡问题 查看 提交 统计 提示 提问 总时间限制: 1000ms 内存限制: 65536kB ...
- OpenJ_Bailian 2815 城堡问题(DFS)
题目传送门OpenJ_Bailian 2815 描述 1 2 3 4 5 6 7 ############################# 1 # | # | # | | # #####---### ...
- 百练2815:城堡问题(DFS)
描述 1 2 3 4 5 6 7 ############################# 1 # | # | # | | # #####---#####---#---#####---# 2 # # ...
- 深度优先搜索入门:POJ1164城堡问题(递归、用栈模拟递归)
将问题的各状态之间的转移关系描述为一个图,则深度优先搜索遍历整个图的框架为:Dfs(v) {if( v 访问过)return;将v标记为访问过;对和v相邻的每个点u: Dfs(u);}int main ...
- castle problem——(深度优先搜索,递归实现和stack实现)
将问题的各状态之间的转移关系描述为一个图,则深度优先搜索遍历整个图的框架为:Dfs(v) {if( v 访问过)return;将v标记为访问过;对和v相邻的每个点u: Dfs(u);}int main ...
- ACM北大暑期课培训第三天
今天讲的内容是深搜和广搜 深搜(DFS) 从起点出发,走过的点要做标记,发现有没走过的点,就随意挑一个往前走,走不 了就回退,此种路径搜索策略就称为“深度优先搜索”,简称“深搜”. bool Dfs( ...
- DFS之城堡问题
2019-06-01 17:54:51 坚持!! 题目链接: http://bailian.openjudge.cn/practice/2815 #include <bits/stdc++.h& ...
- 【OpenJudge 8463】Stupid cat & Doge
http://noi.openjudge.cn/ch0204/8463/ 挺恶心的一道简单分治. 一开始准备非递归. 大if判断,后来发现代码量过长,决定大打表判断后继情况,后来发现序号不对称. 最后 ...
- 【OpenJudge 191】【POJ 1189】钉子和小球
http://noi.openjudge.cn/ch0405/191/ http://poj.org/problem?id=1189 一开始忘了\(2^{50}\)没超long long差点写高精度Q ...
随机推荐
- Android Fragment使用小结及介绍
目录(?)[-] 一什么是Fragment 二Fragment的生命周期 三Fragment的两种添加方式addreplace 四两种添加方式性能比较 偶记得第一次接触Fragment,觉得好牛叉的组 ...
- CodeForces 615C
题意: 给定两个字符串s1,s2利用s1去构造s2,s1有无限个,可以翻转,你最少要用几个s1才能构造s2.输出每一次使用的s1的有效区间. 伪思路: 据说是暴力就能过的题目.然而自己就是暴力差,模拟 ...
- python __builtins__ int类 (36)
36.'int', 用于将一个字符串或数字转换为整型 class int(object) | int(x=0) -> integer | int(x, base=10) -> intege ...
- bzoj 4975: [Lydsy1708月赛]区间翻转【博弈论】
必败状态是倒序排列,也就是正序对为0 然后发现,每次翻转都是有奇数个数对(\( C_{4x+2}^{2} C_{4x+3}^{2} \) 都是奇数),所以每次翻转丢回改变正反数对的奇偶性 又因为偶数为 ...
- 两年Java程序员面试经验分享,从简历制作到面试总结!
前言 工作两年左右,实习一年左右,正式工作一年左右,其实挺尴尬的,高不成低不就.因此在面试许多公司,找到了目前最适合自己的公司之后.于是做一个关于面试的总结.希望能够给那些依旧在找工作的同学提供帮助. ...
- 【转】有了Auto Layout,为什么你还是害怕写UITabelView的自适应布局?
Apple 算是最重视应用开发体验的公司了.从Xib到StoryBoard,从Auto Layout到Size Class,每一次的更新,都会给iOS应用的开发带来不小的便利.但是,对于绝对多数i ...
- RobotFramework自动化测试框架(2)- RobotFramework语法
RobotFramework测试用例是由四部分组成的,下面就从这四个部分简单介绍语法: 关键字表 *** Keywords *** 设置表 *** Settings *** 变量表 *** Varia ...
- C++ typedef typename 作用
C++ typedef typename 作用 C++的一些语法让人看着费解,其中就有: typedef typename std::vector<T>::size_type size_t ...
- Educational Codeforces Round 46 (Rated for Div. 2) E. We Need More Bosses
Bryce1010模板 http://codeforces.com/contest/1000/problem/E 题意: 给一个无向图,求图的最长直径. 思路:对无向图缩点以后,求图的最长直径 #in ...
- pyspark中使用累加器Accumulator统计指标
评价分类模型的性能时需要用到以下四个指标 最开始使用以下代码计算,发现代码需要跑近一个小时,而且这一个小时都花在这四行代码上 # evaluate model TP = labelAndPreds.f ...