poj2386 Lake Counting(简单DFS)
2024-10-18 06:12:33
转载请注明出处: viewmode=contents">http://blog.csdn.net/u012860063?viewmode=contents
题目链接: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.
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.
* 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;
}
版权声明:本文博客原创文章,博客,未经同意,不得转载。
最新文章
- Thinking in Unity3D:基于物理着色(PBS)的材质系统
- ubuntu super daemon设置
- 1.1ASP.NET Web API 2入门
- JavaSE知识结构
- 最快让你上手ReactiveCocoa之进阶篇
- java代码效率优化
- ANE接入平台心得记录(安卓)
- insert into select 与select into from -- sql 批量插入
- 不同版本vpb与osg对应关系
- Struts2 用 s:if test 判断String类型的对象属性值和单字符是否相等的问题
- SecureCRT中的ftp文件上传
- Android:将View的内容映射成Bitmap转图片导出
- .net 配置ueditor
- linux提取锁和信号灯经常使用
- 让VS2010记住TFS的登陆用户名和密码
- vue 异步刷新页面,
- Effective Java 第三版——71. 避免不必要地使用检查异常
- FFmpeg 裁剪——音频解码
- C++11 正则表达式简单运用
- mui-图文列表 图片大小问题
热门文章
- Android_多媒体_SoundPool声音池使用
- Vsphere client 无法登陆VCenter 处理的方法
- ServiceProvider实现
- cocos2dx-lua牧场小游戏(一)
- 不用Root权限获取已经安装的Apk安装包
- 使用 angular directive 和 json 数据 D3 随着标签 donut chart演示样本
- Visual Studio跨平台开发实战(1) - Hello Xamarin!
- Scala Hello 示例
- Android 动态显示和隐藏软键盘
- bellman_ford寻找平均权值最小的回路