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 <= ...
随机推荐
- SpringBoot项目多模块打包与部署【pom文件问题】
[bean的pom] [user的pom] 特别注意,user模块因为有返回jsp页面和web相关,所以需要加入web依赖. chapter23 com.yuqiyu 1.0.0 4.0.0 com. ...
- jdk8流list转Map
/** * */ package com.chuanglan.demo; import java.util.ArrayList; import java.util.Arrays; import jav ...
- Oracle存储结构-段区块
段 一个段建立以后首先会分配一个区,区中包括含8个块,这时执行insert插入数据,当这个区写满后,会在分配一个区 1.一个段建立以后,Oracle如何给段分配区? 2.段分配到区以后,有了空闲空间, ...
- StreamWriter、StreamReader
IO流操作文件内容,using System.IO;//引入命名空间 private void button1_Click(object sender, EventArgs e) { if (text ...
- 2-SAT (two-statisfiability) 算法 学习笔记
$2-SAT$问题指的是对于若干限制求出一组可行解的问题. 考虑对于$n$个值域为${0,1}$的变量$x_1 , x_2 ,...,x_n$ 满足若干限制: 若 $x_i = p$ 则 $x_j = ...
- Vue-CLI项目搭建
一.环境搭建 1.安装服务器node 官网下载 https://nodejs.org/zh-cn/ node:用C++语言编写,用来运行JavaScript语言 node可以为前端项目提供server ...
- Understanding the Transform Function in Pandas
Understanding the Transform Function in Pandas 来源 What is transform? 我在 Python Data Science Handbook ...
- GC类型以及不同类型GC的搭配 1
jvm内存分配,以及gc算法在上两篇博客中已经有所介绍.接下来我们重点分析不同gc器的特点和他们的搭配使用(并非任何一种新生代GC策略都可以和另一种年老代GC策略进行配合工作)
- C++入门经典-例2.5-使用附加格式说明scanf函数的格式输入
1:代码如下: // 2.5.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" int main() { long iLong; /*长整型变 ...
- 【学习】SpringBoot之自定义拦截器
/** * 自定义拦截器 **/ @Configuration//声明这是一个拦截器 public class MyInterceptor extends WebMvcConfigurerAdapte ...