题目链接:http://poj.org/problem?id=1562
dfs,和poj2386几乎一样
#include<iostream>
#include<cstdio>
using namespace std;
char map[200][200];
int m,n;
int dir[8][2]={{1,0},{0,1},{1,1},{1,-1},{-1,1},{-1,-1},{-1,0},{0,-1}};
void dfs(int x,int y)
{
for(int i=0;i<8;i++)
{
int nx=x+dir[i][0];
int ny=y+dir[i][1];
if(nx >= 0 && nx < m && ny >=0 && ny< n && map[nx][ny] == '@' )
{
map[nx][ny] = '*';
dfs(nx,ny);
}
}
}
int main()
{
while (scanf("%d%d", & m, &n ))
{
if ( m == 0 && n == 0) return 0;
int sum=0;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
cin>>map[i][j];
}
}
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(map[i][j] == '@')
{
dfs(i,j);
sum++;
}
}
}
printf("%d\n",sum);
}
return 0;
}