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 }
本文来自博客园,作者:江上舟摇,转载请注明原文链接:https://www.cnblogs.com/LQS-blog/p/15997405.html