首页 > 代码库 > POJ2386 Lake Counting(DFS)
POJ2386 Lake Counting(DFS)
从任意的W开始,不停地把邻接的部分用‘.‘代替。1次DFS后与初始的这个W连接的所有W就都被替换成了‘.‘,因此直到图中不再存在W为止,总共进行DFS的次数就是答案了。8个方向共对应了8种状态转移,每个格子作为DFS的参数至多被调用一次,所以复杂度为O(8×N×M)=O(N×M)。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; char map[110][110]; int dis[8][2]={{0,1},{1,0},{-1,0},{0,-1},{1,1},{-1,-1},{-1,1},{1,-1}}; int n,m; void dfs(int x,int y) { map[x][y]='.'; for(int i=0;i<8;i++) { int xx=x+dis[i][0]; int yy=y+dis[i][1]; if(xx<0||xx>=n||yy<0||yy>=m) continue; if(map[xx][yy]=='W') { dfs(xx,yy); } } return; } int main() { //freopen("d:\\test.txt","r",stdin); while(cin>>n>>m) { for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { cin>>map[i][j]; } } int ans=0; for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { if(map[i][j]=='.') continue; dfs(i,j); ans++; } } cout<<ans<<endl; } return 0; }
POJ2386 Lake Counting(DFS)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。