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 <= ...
随机推荐
- 【HDU2204】Eddy's爱好
题目大意:求从 1 到 N 中共有多少个数可以表示成 \(M^K,K \gt 1\).\(N \le 1e18\) 题解: 发现 N 很大,若直接枚举 M 的话有 1e9 级别的数据量,肯定超时,因此 ...
- window下,nodejs安装http-server,并开启HTTP服务器
1.下载nodejs 官方下载地址:https://nodejs.org/en/ 2.在cmd命令中,输入node -v 输入出版本号,代表安装成功. 3.输入 npm install http-s ...
- 高可用,多路冗余GFS2集群文件系统搭建详解
高可用,多路冗余GFS2集群文件系统搭建详解 2014.06 标签:GFS2 multipath 集群文件系统 cmirror 实验拓扑图: 实验原理: 实验目的:通过RHCS集群套件搭建GFS2集群 ...
- 【UOJ#37】 [清华集训2014] 主旋律
题目链接 题目描述 给定一张强联通图,求有多少种边的存在情况满足图依然强联通. \(n\leq15\) Sol 首先正难则反,考虑用总数减去不强联通的. 考虑一张不强联通的图,缩点后一定是一个 DAG ...
- 2017noip总结
day0 酒店位置很好,旁边就是玉树公园,3公里处还有万达广场: 晚上去万达吃喝玩乐, 不过,打车等了好久,手机还没电了. 同时水杯还在广州扎根了...(暗示后文悲惨结局) day1 8:30 监考老 ...
- windows如何正确下载补丁包
今天公司让给windows安装补丁,打开链接,我蒙蔽了,这么多包要下载哪个腻?下面来跟杨老师一起学习一下如何确定windows版本,下载正确的补丁包. 首先先看一下下载补丁的页面,懵~~ 登录你需要安 ...
- MyBatis中的JdbcType映射介绍
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本 ...
- 如何基于String实现同步锁?
在某些时候,我们可能想基于字符串做一些事情,比如:针对同一用户的并发同步操作,使用锁字符串的方式实现比较合理.因为只有在相同字符串的情况下,并发操作才是不被允许的.而如果我们不分青红皂白直接全部加锁, ...
- java 获取文本一行一行读
直接上代码: 如果出现乱码:请改一下编码:我这里使用utf-8是会乱码的,改GBK就好了 // 读取文件内容 public static String readFile(String path) {/ ...
- C++入门经典-关于extern变量
1:extern用于解决使用非本源文件的全局变量. 例如:在sample1.cpp中 int a,b; /*外部变来那个定义*/ char c; void main() { cout<<a ...