POJ Lake Counting

最基本的DFS

Lake Counting

Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other)
Total Submission(s) : 10   Accepted Submission(s) : 3
Problem Description
Due to recent rains, water has pooled in various places in Farmer John's field, which is represented by a rectangle of N x M (1 <= N <= 100; 1 <= M <= 100) squares. Each square contains either water ('W') or dry land ('.'). Farmer John would like to figure out how many ponds have formed in his field. A pond is a connected set of squares with water in them, where a square is considered adjacent to all eight of its neighbors. 

Given a diagram of Farmer John's field, determine how many ponds he has.
 

 

Input
* Line 1: Two space-separated integers: N and M 

* Lines 2..N+1: M characters per line representing one row of Farmer John's field. Each character is either 'W' or '.'. The characters do not have spaces between them.
 

 

Output
* Line 1: The number of ponds in Farmer John's field.
 

 

Sample Input
10 12W........WW..WWW.....WWW....WW...WW..........WW..........W....W......W...W.W.....WW.W.W.W.....W..W.W......W...W.......W.
 

 

Sample Output
3
 

 

Source
PKU
 
 
 1 #include <iostream>
 2 #include <cstring>
 3 
 4 using namespace std;
 5 
 6 char map[102][102];
 7 int ans=0;
 8 
 9 int dfs(int x,int y)
10 {
11     if(map[x][y]=='W')
12     {
13         map[x][y]='.';
14         dfs(x-1,y-1);  dfs(x-1,y); dfs(x-1,y+1);
15         dfs(x,y-1);                      dfs(x,y+1);
16         dfs(x+1,y-1); dfs(x+1,y); dfs(x+1,y+1);
17 
18         return 1;
19 
20     }
21     else return 0;
22 }
23 
24 
25 int main()
26 {
27     
28     int m,n;
29     int i,j;
30     cin>>m>>n;
31     ans=0;
32     memset(map,'.',sizeof(map));
33     for(i=1;i<=m;i++)
34         for(j=1;j<=n;j++)
35         {
36             cin>>map[i][j];
37         }
38 
39 
40     for(i=1;i<=m;i++)
41         for(j=1;j<=n;j++)
42         {
43             if(dfs(i,j))
44                 ans++;
45         }
46 
47 //    cout<<dfs(1,1)<<endl;
48 
49     cout<<ans;
50 
51 
52     return 0;
53 }

 

posted @ 2013-04-11 11:50  码代码的猿猿  阅读(297)  评论(0编辑  收藏  举报