转载请注明出处:

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.

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;
}

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

最新文章

  1. Thinking in Unity3D:基于物理着色(PBS)的材质系统
  2. ubuntu super daemon设置
  3. 1.1ASP.NET Web API 2入门
  4. JavaSE知识结构
  5. 最快让你上手ReactiveCocoa之进阶篇
  6. java代码效率优化
  7. ANE接入平台心得记录(安卓)
  8. insert into select 与select into from -- sql 批量插入
  9. 不同版本vpb与osg对应关系
  10. Struts2 用 s:if test 判断String类型的对象属性值和单字符是否相等的问题
  11. SecureCRT中的ftp文件上传
  12. Android:将View的内容映射成Bitmap转图片导出
  13. .net 配置ueditor
  14. linux提取锁和信号灯经常使用
  15. 让VS2010记住TFS的登陆用户名和密码
  16. vue 异步刷新页面,
  17. Effective Java 第三版——71. 避免不必要地使用检查异常
  18. FFmpeg 裁剪——音频解码
  19. C++11 正则表达式简单运用
  20. mui-图文列表 图片大小问题

热门文章

  1. Android_多媒体_SoundPool声音池使用
  2. Vsphere client 无法登陆VCenter 处理的方法
  3. ServiceProvider实现
  4. cocos2dx-lua牧场小游戏(一)
  5. 不用Root权限获取已经安装的Apk安装包
  6. 使用 angular directive 和 json 数据 D3 随着标签 donut chart演示样本
  7. Visual Studio跨平台开发实战(1) - Hello Xamarin!
  8. Scala Hello 示例
  9. Android 动态显示和隐藏软键盘
  10. bellman_ford寻找平均权值最小的回路