深搜 dfs
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <vector>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <functional>
#include <string>
#include <map>
#include <cctype>
using namespace std;
char mmap[1000+10][80+10];
bool mark[1000+10][80+10];
int gox[]= {-1,-1,0,1,1, 1, 0,-1};
int goy[]= { 0, 1,1,1,0,-1,-1,-1};
int w,h;
void dfs(int x,int y)
{
int nx,ny;
for(int i=0; i<8; i++)
{
nx=x+gox[i];
ny=y+goy[i];
if(nx>=0&&nx<h&&ny>=0&&ny<w&&mark[nx][ny]==false&&mmap[nx][ny]=='*')
{
mark[nx][ny]=true;
dfs(nx,ny);
}
}
}
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
while(scanf("%d %d",&w,&h)!=EOF)
{
for(int i=0; i<h; i++)
{
scanf("%s",mmap[i]);
}
memset(mark,false,sizeof(mark));
int con=0;
for(int i=0; i<h; i++)
{
for(int j=0; j<w; j++)
{
if(mmap[i][j]=='*'&&mark[i][j]==false)
{
dfs(i,j);
con++;
}
}
}
printf("%d\n",con);
}
return 0 ;
}