原题链接:http://http://poj.org/problem?id=2386
题目解析:
深搜的入门题,一个“W”只要在八个相邻方向上有另外的一个"W"就认为是一个水塘。
代码如下:
#include <iostream>
#include <cstdio>
#include <algorithm>
#define MAX 200
using namespace std;
int n,m;
typedef struct{
char condition;
bool visted;
}land;
land matrix[MAX][MAX];
int count_ = 0;
void DFS (int x,int y);
int main()
{
scanf("%d %d",&n,&m);
getchar();
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
scanf("%c",&matrix[i][j].condition);
matrix[i][j].visted = false;
}
getchar();
}
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
if(matrix[i][j].condition == 'W'&& matrix[i][j].visted == false){
DFS(i,j);
count_++;
}
cout<<count_<<endl;
return 0;
}
void DFS (int x,int y)
{
matrix[x][y].visted = true;
for(int i = max(0,x-1);i <= min(x+1,n-1); i++)
for(int j = max(0,y-1);j <= min(y+1,m-1); j++)
if(matrix[i][j].condition == 'W' && matrix[i][j].visted ==false)
DFS(i,j);
return;
}