POJ2386----Lake Counting

 1 /*
 2 利用宽搜将每块积水填满,添加一个计数器,记下填满几块积水即答案
 3 */
 4 #include<iostream>
 5 using namespace std;
 6 char a[105][105];
 7 int r[8][2] = {{-1,-1},{-1,0},{0,-1},{-1,1},{1,-1},{1,1},{1,0},{0,1}};
 8 int n,m;
 9 void dfs(int x,int y)
10 {
11     //cout << x << " " << y << endl;
12     if(x < 0 || x >= n) return ;
13     if(y < 0 || y >= m) return ;
14     if(a[x][y] != 'W') return ;
15     a[x][y] = '.';
16     for(int i=0; i<8; ++i)
17         dfs(x+r[i][0],y+r[i][1]);
18 }
19 int main()
20 {
21     while(cin >> n >> m)
22     {
23         int ans = 0;
24         for(int i=0; i<n; ++i)
25             cin >> a[i];
26         for(int i=0; i<n; ++i)
27             for(int j=0; j<m; ++j)
28                 if(a[i][j] == 'W')
29                 {
30                     ++ans;
31                     dfs(i,j);
32                 }
33         cout << ans << endl;
34     }
35     return 0;
36 }
原文地址:https://www.cnblogs.com/qq188380780/p/7226277.html