http://acm.ecnu.edu.cn/problem/2856/
深搜。
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
#define INF 1010
int dir[8][2]= {{1,0},{1,1},{0,1},{-1,1},{-1,0},{-1,-1},{0,-1},{1,-1}};
//int dirx[]= {-1,-1,0,1,1, 1, 0,-1};
//int diry[]= { 0, 1,1,1,0,-1,-1,-1};
char table[INF][100];
int mark[INF][100],w,h;
void dfs (int x,int y) {
int nx,ny;
for(int i=0; i<8; i++) {
nx=x+dir[i][0];
ny=y+dir[i][1];
if(nx>=0&&nx<h&&ny>=0&&ny<w&&mark[nx][ny]==0&&table[nx][ny]=='*') {
mark[nx][ny]=1;
dfs(nx,ny);
}
}
}
int main() {
int i,j;
while(~scanf("%d%d",&w,&h)) {
memset(mark,0,sizeof(mark));
for(i=0; i<h; i++)
scanf("%s",table[i]);
int cnt=0;
for(i=0; i<h; i++) {
for(j=0; j<w; j++) {
if(table[i][j]=='*'&&mark[i][j]==0) {
cnt++;
dfs(i,j);
}
}
}
printf("%d\n",cnt);
}
}