poj2386
#include<iostream> char map[101][101]; int vis[101][101]; typedef struct node { int x; int y; }node; node queue[10000]; int n,m; int dx[8]={-1,-1,-1,0,1,1,1,0}; int dy[8]={-1,0,1,1,1,0,-1,-1}; int ans; void bfs(int x, int y) { int tail,head; tail=head=0; node startnode; startnode.x=x; startnode.y=y; queue[tail++]=startnode; vis[startnode.x][startnode.y]=1; while(head!=tail) { node cur=queue[head++]; node next=cur; for(int i=0;i<8;i++) { next.x=cur.x+dx[i]; next.y=cur.y+dy[i]; if(next.x>=0&&next.x<n&&next.y>=0&&next.y<m) { if(vis[next.x][next.y]==0&&map[next.x][next.y]=='W') { vis[next.x][next.y]=1; queue[tail++]=next; } } } } } int main() { //freopen("input.txt","r",stdin); scanf("%d%d",&n,&m); for(int i=0;i<n;i++) scanf("%s",map[i]); for(int i=0;i<n;i++) for(int j=0;j<m;j++) vis[i][j]=0; ans=0; for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { if(map[i][j]=='W'&&vis[i][j]==0) { bfs(i,j); ans++; } } } printf("%d\n",ans); return 0; }