踏青(计蒜客)
1 #include<iostream> 2 #include<queue> 3 using namespace std; 4 char a[105][105]; 5 struct node{ 6 int x; 7 int y; 8 node(int x,int y) 9 { 10 this->x=x; 11 this->y=y; 12 } 13 }; 14 int dir[][2]={{0,1},{1,0},{0,-1},{-1,0}} ; 15 int vis[105][105]; 16 bool bush(int x,int y) 17 { 18 if(vis[x][y]==0&&a[x][y]=='#') 19 return true; 20 else 21 return false; 22 } 23 int main() 24 { 25 int n,m; 26 cin>>n>>m; 27 int count=0; 28 for(int i=1;i<=n;++i) 29 for(int j=1;j<=m;++j) 30 { 31 cin>>a[i][j]; 32 } 33 for(int i=1;i<=n;++i) 34 for(int j=1;j<=m;++j) 35 { 36 if(bush(i,j)) 37 { 38 queue<node> q; 39 node start = node(i,j); 40 q.push(start); 41 vis[i][j]=1; 42 while(!q.empty()) 43 { 44 node now = q.front(); 45 int x=now.x; 46 int y=now.y; 47 for(int k=0;k<4;k++) 48 { 49 if((x+dir[k][0])>0&&(x+dir[k][0]<=n)&&(y+dir[k][1]>0)&&(y+dir[k][1]<=m)) 50 { 51 if(bush(x+dir[k][0],y+dir[k][1])) 52 { 53 node next = node(x+dir[k][0],y+dir[k][1]); 54 q.push(next); 55 vis[x+dir[k][0]][y+dir[k][1]]=1; 56 } 57 } 58 } 59 q.pop(); 60 } 61 count++; 62 } 63 } 64 cout<<count; 65 return 0; 66 }