//简单的bfs 练习一下
#include<iostream> #include<cstring> #include<cstdio> #include<queue> using namespace std; const int maxm=1111; int map[maxm][maxm]; int vis[maxm][maxm]; int x[4]={0,0,1,-1}; int y[4]={1,-1,0,0}; int N; struct Node{ int x; int y; Node() { x=0; y=0; } }; queue<Node>que; int check(int xx,int yy) { if(xx<1 || yy<1 || xx>N || yy>N) return 0; if(map[xx][yy]==0) return 0; else return 1; } void bfs(int i,int j) { Node n; n.x=i; n.y=j; que.push(n); vis[n.x][n.y]=1; map[n.x][n.y]=0; while(!que.empty()) { Node t=que.front(); vis[t.x][t.y]=1; map[t.x][t.y]=0; que.pop(); for(int i=0;i<4;i++) { int xx=t.x+x[i]; int yy=t.y+y[i]; if(check(xx,yy)==0 || vis[xx][yy]==1) { continue; } else { Node nt; nt.x=xx; nt.y=yy; vis[nt.x][nt.y]=1; map[nt.x][nt.y]=0; que.push(nt); } } } } int main() { freopen("qqbn.in","r",stdin); int s=0; memset(vis,0,sizeof(vis)); memset(map,0,sizeof(map)); cin>>N; for(int i=1;i<=N;i++) { getchar(); for(int j=1;j<=N;j++) { char c=getchar(); if(c=='.') { map[i][j]=0; } else { map[i][j]=1; } } } for(int i=1;i<=N;i++) { for(int j=1;j<=N;j++) { if(map[i][j]==1) { bfs(i,j); s++; } else { continue; } } } cout<<s<<endl; return 0; }