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) // Look for the next eight for each @ @ in the directions, and marked, become a whole 
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 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325382374&siteId=291194637