题目链接:http://poj.org/problem?id=2386
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
题目大意:w为水坑,。为陆地,一个w周围8格如果还有w则算连着的水坑,问一张地图上有多少个水坑
简单的深度搜索,每找到一个水坑,则将所有与之相连的水坑改成陆地,水坑数目加一,遍历所有的符号,直到没有水坑为止;
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<queue>
#include<stack>
#include<string>
#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long
#define da 10000000
#define xiao -10000000
#define clean(a,b) memset(a,b,sizeof(a))
char map[110][110];
int n,m;
void dfs(int x,int y)
{
map[x][y]='.'; //将这个水坑改为陆地
int i,j;
for(i=-1;i<=1;++i) //遍历上下
{
for(j=-1;j<=1;++j) //遍历左右
{
int nx=x+i; //目前的 x轴
int ny=y+j; //目前的 y轴
if(nx>=1&&nx<=n&&ny>=1&&ny<=n) //在地图内
{
if(map[nx][ny]=='W') //是水坑
dfs(nx,ny); //继续找有没有相邻的水坑
}
}
}
}
int main()
{
scanf("%d%d",&n,&m);
int i,j;
for(i=1;i<=n;++i)
{
for(j=1;j<=m;++j)
cin>>map[i][j]; //输入地图
}
int sum=0; //初始水坑数目为0;
for(i=1;i<=n;++i) //遍历地图 x轴
{
for(j=1;j<=n;++j) //遍历 y轴
{
if(map[i][j]=='W') //如果是水坑
{
dfs(i,j); //找到所有与之相连的水坑
sum++; //个数加一
}
}
} //遍历完毕
printf("%d\n",sum); //输出
}