poj Lake Counting

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

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

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

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

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

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 char ch[110][110];
 4 int n,m;
 5 int res;
 6 #define CHECK(x,y)(x>=0&&x<n&&y>=0&&y<m)
 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<n;i++)
28     {
29         for(register int j=0;j<m;j++)
30         cin>>ch[i][j];
31     }
32     for(register int i=0;i<n;i++)
33     {
34         for(register int j=0;j<m;j++)
35         {
36             if(ch[i][j]=='W')//如果是水洼 
37             {
38                 dfs(i,j);//从当前位置开搜 
39                 res++;//满足条件数量加1 
40             }
41         }
42     }
43     cout<<res<<endl;
44     return 0;
45  } 

 

posted @ 2022-03-12 15:44  江上舟摇  阅读(11)  评论(0编辑  收藏  举报