踏青(计蒜客)

 

 

 

 

 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 } 

 

posted @ 2020-03-18 15:48  caxi  阅读(210)  评论(0编辑  收藏  举报