hdu 1241 Oil Deposits (一次dfs搞定有某有)

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<algorithm>
 5 using namespace std;
 6 char map[105][105];
 7 
 8 int dir[8][2]={0, 1, 1, 0, -1, 0, 0, -1, 1, 1, 1, -1, -1, 1, -1, -1};
 9 int n, m;
10 int ans;
11 
12 bool judge(int x, int y){
13       if(x<1 || x>n || y<1 || y>m) return false;
14       return true;
15 }
16 
17 void dfs(int x, int y, bool flag){
18 
19    if(map[x][y]=='@'){
20           map[x][y]='*';
21           ++ans;
22        for(int i=0; i<8; ++i){
23              int xx=x+dir[i][0], yy=y+dir[i][1];
24              if(judge(xx, yy) && map[xx][yy]=='@'){
25                   --ans;
26              dfs(xx, yy, 1);
27           }
28        }
29        if(flag)  return;//flag==1表明没有将油田搜索完毕
30    }
31    
32    for(int i=0; i<8; ++i){
33           int xx=x+dir[i][0], yy=y+dir[i][1];  
34             if(judge(xx, yy) && map[xx][yy]!='#'){
35               if(map[xx][yy]=='*')
36                  map[xx][yy]='#';
37               dfs(xx, yy, 0);
38           }
39    }
40 }
41 
42 int main(){
43     while(cin>>n>>m && (n||m)){
44         for(int i=1; i<=n; ++i)
45            cin>>(map[i]+1);
46         ans=0;
47         dfs(1, 1, 0);
48         cout<<ans<<endl;
49     }
50     return 0;
51 }

 

你可能感兴趣的:(HDU)