洛谷 P1596 [USACO10OCT]湖计数Lake Counting

题目链接

https://www.luogu.org/problemnew/show/P1596


题目描述

Due to recent rains, water has pooled in various places in Farmer John's field, which is represented by a rectangle of N x M (1 <= N <= 100; 1 <= M <= 100) squares. Each square contains either water ('W') or dry land ('.'). Farmer John would like to figure out how many ponds have formed in his field. A pond is a connected set of squares with water in them, where a square is considered adjacent to all eight of its neighbors. Given a diagram of Farmer John's field, determine how many ponds he has.

由于近期的降雨,雨水汇集在农民约翰的田地不同的地方。我们用一个NxM(1<=N<=100;1<=M<=100)网格图表示。每个网格中有水('W') 或是旱地('.')。一个网格与其周围的八个网格相连,而一组相连的网格视为一个水坑。约翰想弄清楚他的田地已经形成了多少水坑。给出约翰田地的示意图,确定当中有多少水坑。


输入输出格式

输入格式:

Line 1: Two space-separated integers: N and M * Lines 2..N+1: M characters per line representing one row of Farmer John's field. Each character is either 'W' or '.'. The characters do not have spaces between them.

第1行:两个空格隔开的整数:N 和 M 第2行到第N+1行:每行M个字符,每个字符是'W'或'.',它们表示网格图中的一排。字符之间没有空格。

输出格式:

Line 1: The number of ponds in Farmer John's field.

一行:水坑的数量


思路

没错,我又找到了一个可以暴搜的题目,因为又是判断连通块

似乎并没有什么技术含量的暴搜,有时候,就可以A掉一个题!!

8个if,让你的人生更加美好!!

因为所有的水坑都是连在一起的,所以我们可以for循环找到某一个水坑的某一个元素,将ans加1,然后将其周围的水全部变成陆地(及将这个水坑删除),然后这样一步一步搜下来就可以找出水坑数啦!

接下来我们就看代码吧!


代码

#include<iostream>
#include<cstdio>
#include<queue>
#include<stack>
#include<algorithm>
#include<cmath>
#include<deque>
using namespace std; int n,m;
char a[][];
bool f[][]= {false}; int baosou(int x,int y) {//将访问的这个水坑删除
if(a[x][y+]=='W') {
a[x][y+]='.';
baosou(x,y+);
}
if(a[x][y-]=='W'){
a[x][y-]='.';
baosou(x,y-);
}
if(a[x+][y]=='W') {
a[x+][y]='.';
baosou(x+,y);
}
if(a[x-][y]=='W') {
a[x-][y]='.';
baosou(x-,y);
}
if(a[x+][y+]=='W') {
a[x+][y+]='.';
baosou(x+,y+);
}
if(a[x+][y-]=='W') {
a[x+][y-]='.';
baosou(x+,y-);
}
if(a[x-][y+]=='W') {
a[x-][y+]='.';
baosou(x-,y+);
}
if(a[x-][y-]=='W') {
a[x-][y-]='.';
baosou(x-,y-);
}
} int main() {
scanf("%d%d",&n,&m);
if(m==)return ;
int ans=;
for(int i=; i<=n; i++) {
for(int j=; j<=m; j++) {
cin>>a[i][j];
//听我的,永远不要用scanf输入字符
}
}
for(int i=; i<=n; i++) {
for(int j=; j<=m; j++) {
if(a[i][j]=='W') {
a[i][j]='.';
ans++;//找到之后将这个点变成旱地并将ans加1
baosou(i,j);//开始暴搜
}
}
}
cout<<ans<<endl;
return ;
}

最新文章

  1. Python 面向对象(初级篇)
  2. SQL的inner join、left join、right join、full outer join、union、union all
  3. Http响应code
  4. ubuntu命令查补
  5. C#UDP编程总结
  6. solr4.x配置IK2012FF智能分词+同义词配置
  7. ie 提示浏览器升级信息 干掉ie
  8. Android屏幕大小适配问题解决
  9. c#调用语音功能
  10. win7 Python 环境 准备 配置
  11. eclipse背景颜色修改插件color theme
  12. Spring的5种事物配置方式
  13. Activity猫的一生-故事讲解Activity生命周期
  14. linux 学习笔记 finding people
  15. 关于var、let、const的故事
  16. 使用Spring Boot开发 “Hello World” Web应用
  17. PHP 安装memcache.so 和memcached.so
  18. P1666 前缀单词
  19. Problem J: 零起点学算法34——3n+1问题
  20. 使用BUCK进行iOS项目打包

热门文章

  1. web-worker 的使用
  2. ssh-keygen的学习总结
  3. ORACLE获取SQL绑定变量值的方法总结
  4. jQuery实现画面的展开、收起和停止
  5. C#-hello world(二)
  6. Sql Full-Text Filter
  7. Linux CFS调度器之task_tick_fair处理周期性调度器--Linux进程的管理与调度(二十九)
  8. python设计模式之单例模式(转)
  9. C# -- 使用XmlDocument或XDocument创建xml文件
  10. 【算法】LeetCode算法题-Remove Element