poj2386 Lake Counting(简单DFS)

poj2386 Lake Counting(简单DFS)

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

转载请注明出处:题目链接:http://poj.org/problem?id=1562

----------------------------------------------------------------------------------------------------------------------------------------------------------
欢迎光临天资小屋害羞害羞害羞害羞http://user.qzone.qq.com/593830943/main

----------------------------------------------------------------------------------------------------------------------------------------------------------


Description

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.

Input

* 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.

Output

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

Sample Input

10 12
W........WW.
.WWW.....WWW
....WW...WW.
.........WW.
.........W..
..W......W..
.W.W.....WW.
W.W.W.....W.
.W.W......W.
..W.......W.

Sample Output

3

代码例如以下:

#include <iostream>
#include <algorithm>
using namespace std;
#include <cstring>
#define TM 100+17
int N, M;
char map[TM][TM];
bool vis[TM][TM];
int xx[8]={0,1,1,1,0,-1,-1,-1};
int yy[8]={1,1,0,-1,-1,-1,0,1};
void DFS(int x, int y)
{
	vis[x][y] = true;
	for(int i = 0; i < 8; i++)
	{
		int dx = x+xx[i];
		int dy = y+yy[i];
		if(dx>=0&&dx<N&&dy>=0&&dy<M&&!vis[dx][dy]&&map[dx][dy] == 'W')
		{
			vis[dx][dy] = true;
			DFS(dx,dy);
		}
	}
}
int main()
{
	int i, j;
	while(cin>>N>>M)
	{
		int count = 0;
		memset(vis,false,sizeof(vis));
		for(i = 0; i< N; i++)
		{
			cin>>map[i];
		}
		for(i = 0; i < N; i++)
		{
			for(j = 0; j < M; j++)
			{
				if(map[i][j] == 'W' && !vis[i][j])
				{
					count++;
					DFS(i,j);
				}
			}
		}
		cout<<count<<endl;
	}
	return 0;
}

版权声明:本文博客原创文章,博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117525.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • this关键字与super关键字详解

    this关键字与super关键字详解一.this关键字1.实例一:(1)需求:使用Java类描述一个动物;(2)实例:classAnimal{ Stringname; //成员变量 Stringcolor; publicAnimal(Stringn,Stringc){ name=n; color=c; } publicvoideat(){ Stringname=

    2022年6月15日
    32
  • 选择有这些特点的it行业人力外包公司没错

    选择有这些特点的it行业人力外包公司没错互联网的快速发展加快了传统企业信息化进程,很多传统企业自己组建软件技术部,既缺少技术开发经验,又缺乏软件项目管理经验,因此软件外包成为这些公司的首选。但完全的项目外包,使得其与软件外包公司的沟通变的不畅通,软件外包公司又缺乏传统企业的业务经验,且保密性很差,所以不少传统企业会选择和it行业人力外包公司合作来引进it人才,那么什么样的it行业人力外包公司值得选择?一、选择有一定年限的it行业人力外包公司为什么要选择一个成立时间长的it行业人力外包公司呢?因为it行业人力外包公司成立的时间越长,越能

    2022年5月19日
    47
  • 【JS】JS数组添加元素的三种方法「建议收藏」

    【JS】JS数组添加元素的三种方法「建议收藏」1、push()方法可向数组的末尾添加一个或多个元素,并返回新的长度。  1)、语法:arrayObject.push(newelement1,newelement2,….,newelementX)参数 描述 newelement1 必需。要添加到数组的第一个元素。 newelement2 可选。要添加到数组的第二个元素。 newelement…

    2025年5月27日
    2
  • Ubuntu安装GCC编译器

    Ubuntu安装GCC编译器没有gcc啊如何安装gccapt-getinstallbuild-essential

    2022年7月24日
    12
  • Android中View绘制流程以及invalidate()等相关方法分析

    Android中View绘制流程以及invalidate()等相关方法分析

    2021年12月3日
    44
  • stm32循迹小车详细制作过程(附加完全版代码)「建议收藏」

    stm32循迹小车详细制作过程(附加完全版代码)「建议收藏」stm32循迹小车详细制作过程一.材料准备1、主控板Stm32f103c8t6(推荐,便宜够用)2、下载器USB转TTL串口模块3、电源12v锂电池组、配套充电器(推荐下图这种,方便,好接线,12v!12v!12v!)4、电机驱动模块L298n电机驱动模块(尽量多备一两个,容易烧)5、循迹模块TCRT5000循迹模块(多买几个,四个吧)6、杜邦线公对公、母对母、公对母(都买上,不贵,消耗品)7、开关避免出现意外还是备一个吧8、小车底座有四个轮的,三个轮的(

    2022年9月20日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号