zoj 1709 Oil Deposits

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=709

解题思路:DFS搜索

  1 ///////////////////////////////////////////////////////////////////////////
  2 //problem_id: zoj 1709
  3 //user_id: SCNU20102200088
  4 ///////////////////////////////////////////////////////////////////////////
  5 
  6 #include <algorithm>
  7 #include <iostream>
  8 #include <iterator>
  9 #include <iomanip>
 10 #include <cstring>
 11 #include <cstdlib>
 12 #include <string>
 13 #include <vector>
 14 #include <cstdio>
 15 #include <cctype>
 16 #include <cmath>
 17 #include <queue>
 18 #include <stack>
 19 #include <list>
 20 #include <set>
 21 #include <map>
 22 using namespace std;
 23 
 24 ///////////////////////////////////////////////////////////////////////////
 25 typedef long long LL;
 26 const double PI=acos(-1.0);
 27 ///////////////////////////////////////////////////////////////////////////
 28 
 29 ///////////////////////////////////////////////////////////////////////////
 30 //Add Code:
 31 int m,n,cnt;
 32 char oil[105][105];
 33 const int x[]={0,1,1,1,0,-1,-1,-1};
 34 const int y[]={1,1,0,-1,-1,-1,0,1};
 35 
 36 void DFS(int i,int j){
 37     if(i<1 || i>m || j<1 || j>n) return ;
 38     for(int p=0;p<8;p++){
 39         if(oil[i+x[p]][j+y[p]]=='@'){
 40             oil[i+x[p]][j+y[p]]='*';
 41             cnt--;
 42             DFS(i+x[p],j+y[p]);
 43         }
 44     }
 45     return ;
 46 }
 47 ///////////////////////////////////////////////////////////////////////////
 48 
 49 int main(){
 50     ///////////////////////////////////////////////////////////////////////
 51     //Add code:
 52     while(scanf("%d%d",&m,&n)!=EOF){
 53         if(!(m||n)) break;
 54         int i,j;
 55         char ch;
 56         cnt=0;
 57         scanf("%c",&ch);
 58         for(i=1;i<=m;i++){
 59             for(j=1;j<=n;j++){
 60                 scanf("%c",&oil[i][j]);
 61                 if(oil[i][j]=='@') cnt++;
 62             }
 63             scanf("%c",&ch);
 64         }
 65         int ans=0;
 66         while(cnt){
 67             for(i=1;i<=m;i++){
 68                 for(j=1;j<=n;j++){
 69                     if(oil[i][j]=='@'){
 70                         oil[i][j]='*';
 71                         cnt--;
 72                         DFS(i,j);
 73                         ans++;
 74                     }
 75                 }
 76             }
 77         }
 78         printf("%d\n",ans);
 79     }
 80     ///////////////////////////////////////////////////////////////////////
 81     return 0;
 82 }
 83 
 84 ///////////////////////////////////////////////////////////////////////////
 85 /*
 86 Testcase:
 87 Input:
 88 1 1
 89 *
 90 3 5
 91 *@*@*
 92 **@**
 93 *@*@*
 94 1 8
 95 @@****@*
 96 5 5
 97 ****@
 98 *@@*@
 99 *@**@
100 @@@*@
101 @@**@
102 0 0
103 Output:
104 0
105 1
106 2
107 2
108 */
109 ///////////////////////////////////////////////////////////////////////////

posted on 2013-08-17 13:10  SCNU20102200088  阅读(155)  评论(0编辑  收藏  举报

导航