这种题深搜和广搜都能做出来,个人感觉深搜比较好
还是提几点注意:
1.明白水塘在这个题中的定义
2.明白深搜和广搜的不同之处
Description
Given a diagram of Farmer John's field, determine how many ponds he has.
Input
* 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
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<stdio.h>
#include<string.h>
int used[150][150]; //用来看元素是否被标记
char map[150][150];
int direction[8][2]={-1,0,0,-1,1,0,0,1,1,1,-1,-1,1,-1,-1,1}; //方向数组
int n,min,m,x,y,num;
void dfs(int x,int y)
{
int k,a,b;
used[x][y]=1;
for(k=0;k<8;k++)
{
a=x+direction[k][0];
b=y+direction[k][1];
if(a<n&&a>=0&&b<m&&b>=0&&used[a][b]==0&&map[a][b]=='W')
{
used[a][b]==1;
dfs(a,b); //递归
}
}
}
int main(void)
{
int i,j;
scanf("%d%d",&n,&m);
for(i=0;i<n;i++) scanf("%s",map[i]);
num=0;
memset(used,0,sizeof(used));
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(used[i][j]==0&&map[i][j]=='W')
{
dfs(i,j); //调用bfs主要是标记那些有水的地方!!!!
num++;
}
}
}
printf("%d\n",num);
return 0;
}