P1596 【[USACO10OCT]湖计数Lake Counting】
个人感觉这题还是很简单的,就是一个完全不加工的找联通块个数
个人解题思路是先读入,然后循环一遍,遇到水就dfs,并把这个w所在的联通块“删除”,并在答案上加一
最后输出答案
具体注释看程序:::
#include<cmath>
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m,ans;
bool a[][];//我用布尔数组,反正就两种情况
void dfs(int x,int y){//dfs
a[x][y]=false;//删除连通块
if(x+<=n&&a[x+][y])dfs(x+,y);//如果下面是水(。。。),往下搜
if(y+<=m&&a[x][y+])dfs(x,y+);//如果左边是水,往左搜,注意y是与m比较,千万不要把m,n弄混
if(x->=&&a[x-][y])dfs(x-,y);//往上搜
if(y->=&&a[x][y-])dfs(x,y-);//往右搜
if(x+<=n&&y+<=m&&a[x+][y+])dfs(x+,y+);//往左上搜
if(x+<=n&&y->=&&a[x+][y-])dfs(x+,y-);//往右上搜
if(x->=&&y+<=m&&a[x-][y+])dfs(x-,y+);//往左下搜
if(x->=&&y->=&&a[x-][y-])dfs(x-,y-);//往右下搜
}
void sc(){//这是我个人调试时用的程序,看被删除的连通块是哪一个,有兴趣的同学可以看看~~~
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
if(a[i][j])cout<<"w";
else cout<<".";
}
cout<<endl;
}
}
int main(){//主函数
cin>>n>>m;//读入
for(int i=;i<=n;i++){
string x;//定义字符串,字符串虽然是单独的一个变量,但可以直接用下标访问
cin>>x;//读入连续一段char型的字符串,比较方便
for(int j=;j<=m;j++){
if(x[j-]=='.')a[i][j]=false;//注意,x是从下标为0的地方开始读的,如果不是水块,就赋值否
else a[i][j]=true;//否则为是
}
}
for(int i=;i<=n;i++){//模拟
for(int j=;j<=m;j++){
if(a[i][j]){//如果是水
//cout<<i<<' '<<j<<endl;个人调试所用
dfs(i,j);//删除连通块
//sc();个人调试所用
ans++;//答案数加一
}
}
}
cout<<ans<<endl;//输出答案
return ;
}//完美结束 最后,祝大家天天开心,编程顺利(。。。)
新人开博鼓励一下吧~~~
P1596 【[USACO10OCT]湖计数Lake Counting】的更多相关文章
- 洛谷 P1596 [USACO10OCT]湖计数Lake Counting
题目链接 https://www.luogu.org/problemnew/show/P1596 题目描述 Due to recent rains, water has pooled in vario ...
- 洛谷——P1596 [USACO10OCT]湖计数Lake Counting
P1596 [USACO10OCT]湖计数Lake Counting 题目描述 Due to recent rains, water has pooled in various places in F ...
- 洛谷P1596 [USACO10OCT]湖计数Lake Counting
https://www.luogu.org/problemnew/show/P1596 连通块水题... 大体思路是找到是水坑的坐标然后就开始不断递归,往八个方向搜,把连在一起的都标记一遍直到找不到为 ...
- Luogu P1596 [USACO10OCT]湖计数Lake Counting
题目描述 Due to recent rains, water has pooled in various places in Farmer John's field, which is repres ...
- $P1596 [USACO10OCT]湖计数Lake Counting$
\(problem\) 其实这题吧\(DFS\)好写一点(大雾 所以就不讲\(DFS\)了 em \(BFS\)的话 主要是 判重. 方向. 队列.(没了吧 至于位置 用两个队列?还是\(pair\) ...
- [USACO10OCT]湖计数Lake Counting 联通块
题目描述 Due to recent rains, water has pooled in various places in Farmer John's field, which is repres ...
- Poj2386 Lake Counting (DFS)
Lake Counting Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 49414 Accepted: 24273 D ...
- POJ 之2386 Lake Counting
Lake Counting Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 20003 Accepted: 10063 D ...
- 【POJ - 2386】Lake Counting (dfs+染色)
-->Lake Counting 直接上中文了 Descriptions: 由于近日阴雨连天,约翰的农场中中积水汇聚成一个个不同的池塘,农场可以用 N x M (1 <= N <= ...
随机推荐
- R 语言中的多项式回归
代码 sessionInfo() # 查询版本及系统和库等信息 # 工作目录设置 getwd() path <- "E:/RSpace/R_in_Action" setwd( ...
- idea无法创建javaclass文件
一直用pycharm和jupyter. 今天发现打开IDEA 创建一个新的java项目(maven)后无法在里面的module中创建相应的java class文件 解决方案: (1)选择 File—— ...
- 第十一章 前端开发-html
第十一章 前端开发-html 1.1.0 html:超文本标记语言 html特征:(HyperText Markup Language) 对换行的空格不敏感 空白折叠 标签:有称为标记 双闭合标签 & ...
- DOM 修改与DOM元素
㈠HTML DOM - 修改 修改 HTML = 改变元素.属性.样式和事件. ①创建 HTML 内容 改变元素内容的最简单的方法是使用 innerHTML 属性. 下面的例子改变一个 <p ...
- Resttemplate请求失败如何获取返回的json
参考:https://blog.csdn.net/u011974797/article/details/82424004 https://www.cnblogs.com/liumz0323/p/106 ...
- C# 选择文件夹 选择文件
选择文件 //选择文件 OpenFileDialog dialog = new OpenFileDialog(); dialog.Multiselect = true;//该值确定是否可以选择多个文件 ...
- QT5线程关闭
QT5线程关闭 QThread析构函数的说明:请注意,删除一个QThread对象不会停止它管理的线程的执行. 删除正在运行的QThread(即isFinished()返回false)将导致程序崩溃. ...
- [CF1223G/1240E]Wooden Raft 题解
前言 上午一场模拟赛(发布前很久,因为这题题解太长了),发现T3特别珂怕,打开题解,发现一行字: 不要再问了,再问就是CF 1240E 当场去世.jpg. 在下文中,我们记 \(A\) 为 \(a\) ...
- Single-shot Object Detection
以下转自:http://lanbing510.info/2017/08/28/YOLO-SSD.html 在深度学习出现之前,传统的目标检测方法大概分为区域选择(滑窗).特征提取(SIFT.HOG等) ...
- jQuery_复制操作
复制操作代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <t ...