Oil Deposits

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstring>
 4 using namespace std;
 5 
 6 int n,m,cnt;
 7 char mp[110][110];
 8 bool vis[110][110];
 9 int dir[8][2]={{1,0},{1,1},{1,-1},{0,1},{0,-1},{-1,0},{-1,1},{-1,-1}};
10 
11 void dfs(int x,int y) //对每个@ 都寻找旁边八个方向的@ ,并标记,成为一个整体 
12 {
13     for(int i=0;i<8;i++)
14     {
15         int dx= x+dir[i][0];
16         int dy= y+dir[i][1];
17         if(dx<0||dx>n-1||dy<0||dy>m-1)
18             continue;
19         if(mp[dx][dy]=='@'&&vis[dx][dy]==0)
20         {
21             vis[dx][dy]=1;
22             dfs(dx,dy);
23         }
24     }
25 }
26 
27 int main()
28 {
29     while(cin>>n>>m &&n &&m)
30     {
31         memset(vis,0,sizeof(vis));
32         cnt=0;
33         
34         for(int i=0;i<n;i++)
35             cin>>mp[i];
36         for(int i=0;i<n;i++)
37         {
38             for(int j=0;j<m;j++)
39             {
40                 if(mp[i][j]=='@'&&vis[i][j]==0)
41                 {
42                     cnt++;
43                     dfs(i,j);
44                 }
45             }
46         }
47         cout<<cnt<<endl;
48     }
49 }

 HDU - 1241 

posted @ 2018-05-06 21:37  木流牛马  阅读(117)  评论(0编辑  收藏  举报