原题链接https://vjudge.net/contest/331118#problem/A

题目:

现在有一个M*N的方阵,每个格子里面是.或者W,点代表水,然后如果在这个点的周围,即8个方向内还有w,那么可以连成一片,即这两个w看作为1个

输入:M N, 还有方阵

输出:有几个水池

样例输入

10 12
W       .       .      .       .       .      .      .      .       W      W      .
.        W     W    W     .       .      .      .      .       W      W     W   
.        .        .      .      W     W    .       .      .       W      W      .
.        .        .      .       .       .      .       .      .       W      W      .
.        .        .      .       .       .      .       .      .       W       .       .
.        .       W     .       .       .      .       .      .       W       .       .
.       W      .      W      .       .     .        .      .      W       W      .
W     .        W    .      W       .     .       .       .      .         W       .
.       W      .     W      .        .     .        .       .      .        W       .
.       .        W    .        .        .     .        .      .      .         W      .

注释:这里相邻两个字符之间的空格是为了方便看,实际输入的时候是没有的

样例输出

3

代码:

#include<stdio.h>
#include<iostream>
using namespace std;
int sum=0;
char G[105][105];
bool vis[105][105];
int n,m,d[8]= {-1,-1,-1,0, 0, 1,1,1};
int     z[8]= {-1, 0, 1,-1,1,-1,0,1};  //8个方向
void dfs(int q,int w) {
 if(G[q][w]=='W'&&!vis[q][w]&&q<=n&&w<=m && q>0 && w>0) {
  vis[q][w]=true;
  for(int i=0; i<8; i++) {
   if(G[q+d[i]][w+z[i]]=='W'   &&    !vis[q+d[i]][w+z[i]]     &&(q+d[i])<=n&&(w+z[i])<=m &&(q+d[i])>0&&(w+z[i])>0 ) {
    dfs(q+d[i],w+z[i]);
   }
  }
 }
}
int main() {
 cin >> n >> m;
 for(int i=1; i<=n; i++) {
  scanf("%s",G[i]+1);
 }
 for(int q=1; q<=n; q++) {
  for(int w=1; w<=m; w++) {
   if(G[q][w]=='W' && !vis[q][w]) sum++;
   dfs(q,w);
  }
 }
 cout<<sum;
 return 0;
}

vjudge Lake Counting 搜索 水池 8方向的更多相关文章

  1. POJ 2386 Lake Counting 搜索题解

    简单的深度搜索就能够了,看见有人说什么使用并查集,那简直是大算法小用了. 由于能够深搜而不用回溯.故此效率就是O(N*M)了. 技巧就是添加一个标志P,每次搜索到池塘,即有W字母,那么就觉得搜索到一个 ...

  2. POJ 2386 Lake Counting 八方向棋盘搜索

    Lake Counting Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 53301   Accepted: 26062 D ...

  3. POJ 2386 Lake Counting(搜索联通块)

    Lake Counting Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 48370 Accepted: 23775 Descr ...

  4. 【POJ - 2386】Lake Counting (dfs+染色)

    -->Lake Counting 直接上中文了 Descriptions: 由于近日阴雨连天,约翰的农场中中积水汇聚成一个个不同的池塘,农场可以用 N x M (1 <= N <= ...

  5. Poj2386 Lake Counting (DFS)

    Lake Counting Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 49414   Accepted: 24273 D ...

  6. poj 2386:Lake Counting(简单DFS深搜)

    Lake Counting Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 18201   Accepted: 9192 De ...

  7. POJ 2386 Lake Counting(深搜)

    Lake Counting Time Limit: 1000MS     Memory Limit: 65536K Total Submissions: 17917     Accepted: 906 ...

  8. POJ:2386 Lake Counting(dfs)

    Lake Counting Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 40370   Accepted: 20015 D ...

  9. Openjudge1388 Lake Counting【DFS/Flood Fill】

    http://blog.csdn.net/c20182030/article/details/52327948 1388:Lake Counting 总时间限制:   1000ms   内存限制:  ...

随机推荐

  1. JavaScript Math方法的基本使用

    1.Math.sin()方法 定义:返回一个数的正弦. 语法:Math.sin(x),x必须是一个数值. 实例: <!DOCTYPE html> <html lang="e ...

  2. 多线程共享变量和 AsyncLocal

    >>返回<C# 并发编程> 1. 简介 2. 异步下的共享变量 3. 解析 AsyncLocal 3.1. IAsyncLocalValueMap 的实现 3.2. 结论 1. ...

  3. Android中使用画笔和画布绘制一个矩形

    场景 在Android中画笔使用Paint类,画布使用Canvas类来表示. 绘图的基本步骤 首先编写一个继承自View的自定义View类,然后重写其onDraw方法,最后把自定义的view添加到ac ...

  4. IDAE快捷键与设置

    以前做项目的时候都是用Eclispe,来到新的公司发现IDE用的是IDEA集成开发工具,以前也用过IDEA,只是略懂略懂,以后你会发现,当你用IDEA的快捷键的时候,会6的飞起 1.IDEA常用快捷键 ...

  5. JVM第二篇 类加载子系统

    1.内存结构概述 简图 ​ 详细 ​ ​ ​ 2.类加载器与类加载的过程 ​ 类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识[CA FE BA BY ...

  6. python——面向对象,继承

    """继承:子类继承父类1.单继承,多继承2. 子类调用或重用父类的同名属性和方法3. 多层4.私有属性和私有方法class 类名(object<父类>)&q ...

  7. 洛谷新手题 P1028 数的计算题解

    题目描述 我们要求找出具有下列性质数的个数(包含输入的自然数nn): 先输入一个自然数nn(n \le 1000n≤1000),然后对此自然数按照如下方法进行处理: 不作任何处理; 在它的左边加上一个 ...

  8. 发布开源项目到Jcenter

    前言 为了将阿里云短信开箱即用发布到Jcenter仓库,前前后后花费了1天半的时间,把端午节都搭进去了.终于今天收到了Jcenter的消息,自己发布的包被添加到了Jcenter仓库,也算给开源社区做了 ...

  9. vscode侧边栏字体大小修改

    1.找到安装路径下,workbench.desktop.main.css 文件 C:\z_my_install\Microsoft VS Code\resources\app\out\vs\workb ...

  10. c++ 浮点数小数位

    . double f = 3.123456789; . cout<<f<<endl; // 输出3.12346 (包含整数和小数,且四舍五入) . cout<<se ...