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 <= ...
随机推荐
- 宝塔linux面板命令大全 - 宝塔面板
安装宝塔 Centos安装脚本 yum install -y wget && wget -O install.sh http://download.bt.cn/install/inst ...
- DB2中常见sqlCode原因分析
000 | 00000 | SQL语句成功完成 01xxx | SQL语句成功完成,但是有警告 +012 | 01545 | 未限定的列名被解释为一个有相互关系的引用 +098 | 01568 | 动 ...
- java获取音频文件播放时长
方法一: 在项目开发过程中,需要获取音视频文件时长.查询资料后发现 JAVE能够完美得到想要的结果,JAVE项目简介如下: The JAVE (Java Audio Video Encoder) li ...
- Mac的MySQL无法启动的原因
一.由于Mac OS X的升级或其他原因可能会导致一个错误: Warning:The /usr/local/mysql/data directory is not owned by the 'mysq ...
- shell脚本日志指南(1)
1.初始化日志文件.对文件的大小进行判断和压缩 LOG=$ if [ -e "${LOG}" ];then LOG_SIZE=`ls -l "${LOG}"| ...
- 【leetcode】1250. Check If It Is a Good Array
题目如下: Given an array nums of positive integers. Your task is to select some subset of nums, multiply ...
- PLT hook笔记
1. hook技术概述 hook技术是一种拦截用户函数调用的技术.通过hook技术可以实现统计用户对某些函数的调用次数,对函数注入新的功能的目标.在Linux平台,Hook技术可以分成用户和内核 ...
- c语言 - 关键字const的作用
const修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的. 1.const char * p1; //表示p1指向了的字符串不可更改 2.char const ...
- Spark译文(三)
Structured Streaming Programming Guide(结构化流编程指南) Overview(概貌) ·Structured Streaming是一种基于Spark SQL引擎的 ...
- Jmeter -- 入门,基础操作
1. 添加线程组 设置线程组参数(线程数.准备时长.循环次数等): a)线程数:虚拟用户数.一个虚拟用户占用一个进程或线程.设置多少虚拟用户数在这里也就是设置多少个线程数. b)Ramp-Up Per ...