poj Lake Counting


题目链接:http://poj.org/problem?id=2386

经典题目不得不做,很经典;

其实题目的详细说明在《挑战程序设计竞赛》有,我的思路是按照那上面来的;

在某一程度上应该是dfs模板题;

注意事项以及代码如下(poj注意头文件)

 1 #include
 2 using namespace std;
 3 char ch[110][110];
 4 int n,m;
 5 int res;
 6 #define CHECK(x,y)(x>=0&&x=0&&y 7 void dfs(int x,int y)
 8 {
 9     ch[x][y]='.';
10     for(register int dx=-1;dx<=1;dx++)
11     {
12         for(register int dy=-1;dy<=1;dy++)
13         {
14             int newx=dx+x;//常见的四联通问题 
15             int newy=dy+y;
16             if(CHECK(newx,newy)&&ch[newx][newy]=='W')//满足边界并且满足条件 
17             {
18                 dfs(newx,newy);//搜下一个 
19             }
20         }
21     }
22 }
23 int main()
24 {
25     ios::sync_with_stdio(false);
26     cin>>n>>m;
27     for(register int i=0;i)
28     {
29         for(register int j=0;j)
30         cin>>ch[i][j];
31     }
32     for(register int i=0;i)
33     {
34         for(register int j=0;j)
35         {
36             if(ch[i][j]=='W')//如果是水洼 
37             {
38                 dfs(i,j);//从当前位置开搜 
39                 res++;//满足条件数量加1 
40             }
41         }
42     }
43     cout<endl;
44     return 0;
45  }