朴素的FloodFill
#include <stdio.h>
int X,Y;
char a[110][110];
int vis[110][110];
int ax[15]={0,1,-1,1,-1,0,0,0,0,1,2,-1,-2};
int ay[15]={0,1,-1,-1,1,1,2,-1,-2,0,0,0,0};
long ans;
void
init()
{
char s;
scanf("%d%d",&X,&Y);
scanf("%c",&s);
int i,j;
for(i=1;i<=X;i++)
{
for(j=1;j<=Y;j++)
scanf("%c",&a[i][j]);
scanf("%c",&s);
}
}
void
dfs(int x,int y)
{
vis[x][y]=1;
int i;
int u,v;
for(i=1;i<=12;i++)
{
u=x+ax[i];
v=y+ay[i];
if(u>=1 && u<= X && v>=1 && v<=Y && a[u][v]=='#' && !vis[u][v])
dfs(u,v);
}
}
void
doit()
{
int i,j;
for(i=1;i<=X;i++)
for(j=1;j<=Y;j++)
if(!vis[i][j] && a[i][j]=='#'){
ans++;
dfs(i,j);
}
}