http://acm.pku.edu.cn/JudgeOnline/problem?id=2386
一个纯粹的搜索题
代码:
#include<stdio.h>
#include<string.h>
char map[105][105];
//方向数组
int movx[8]={1,1,1,0,-1,-1,-1,0,},movy[8]={-1,0,1,1,1,0,-1,-1};
int s,t;
void dfs(int x,int y )
{
int i;
for(i=0;i<8;i++)
{//确保在范围内
if(x+movx[i]<s&&x+movx[i]>=0&&y+movy[i]>=0&&y+movy[i]<t)
{
if(map[x+movx[i]][y+movy[i]]=='W')
{
//避免了用标记数组来标记已经搜索过的点
map[x+movx[i]][y+movy[i]]='M';
dfs(x+movx[i],y+movy[i]);
}
}
}
}
int main()
{
int i,j,num;
scanf("%d%d",&s,&t);
num=0;
getchar();
for(i=0;i<s;i++)
gets(map[i]);
for(i=0;i<s;i++)
{
for(j=0;j<t;j++)
{
if(map[i][j]=='W')
{
num++;//记录有多少个分块
dfs(i,j);
}
}
}
printf("%d/n",num);
return 0;
}