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)
上一篇 2022年1月4日 下午1:00
下一篇 2022年1月4日 下午2:00


相关推荐

  • 数据仓库–数据分层(ETL、ODS、DW、APP、DIM)

    数据仓库–数据分层(ETL、ODS、DW、APP、DIM)数据仓库各层说明 一 数据加载层 ETL Extract Transform Load 二 数据运营层 ODS OperationalD 三 数据仓库层 DW DataWarehous 1 数据明细层 DWD DataWarehous 2 数据中间层 DWM DataWareHous 3 数据服务层 DWS DataWareHous 四 数据应用层 A

    2026年3月17日
    2
  • 零基础5分钟部署腾讯混元翻译模型:HY-MT1.5-1.8B保姆级教程

    零基础5分钟部署腾讯混元翻译模型:HY-MT1.5-1.8B保姆级教程

    2026年3月13日
    2
  • 如何防止Arp攻击

    如何防止Arp攻击首先需要查找网关的 IP 和 MAC 地址 查看的方法很多 最直接的在 cmd 里面执行 arp a 但这是被 arp 攻击之前 被攻击成功后 192 168 0 1 对应的 mac 地址会变成攻击电脑的 Mac 地址 还有另一个方法 登录路由器查看 在浏览器输入 192 168 0 1 这里是个人的网关 然后输入帐号密码 登录进去 一般在这里都可以找到一个 lanmac 地址 这个就是 其次将本机的 arp 中的 192 168 0 1 对应的 mac 地址改成静态 在运行中输入 cmd nbsp gt nbsp arp amp

    2026年3月26日
    2
  • linux PHPstorm激活码破解方法

    linux PHPstorm激活码破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    41
  • 基于深度学习的图像超分辨率重建技术的研究

    1超分辨率重建技术的研究背景与意义图像分辨率是一组用于评估图像中蕴含细节信息丰富程度的性能参数,包括时间分辨率、空间分辨率及色阶分辨率等,体现了成像系统实际所能反映物体细节信息的能力。相较于低分辨率图像,高分辨率图像通常包含更大的像素密度、更丰富的纹理细节及更高的可信赖度。但在实际上中,受采集设备与环境、网络传输介质与带宽、图像退化模型本身等诸多因素的约束,我们通常并不能直接得到具有边缘锐化、无成块模糊的理想高分辨率图像。提升图像分辨率的最直接的做法是对采集系统中的光学硬件进行改进,但这种做法.

    2022年4月9日
    49
  • pandas读取excel文件,转换为字典

    pandas读取excel文件,转换为字典pandas读取excel文件,转换为字典

    2025年6月9日
    5

发表回复

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

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