poj 2386 Lake Counting
来源:互联网 发布:17173dnf装备数据库 编辑:程序博客网 时间:2024/05/02 02:50
dfs 水题,给定的矩阵水池的分布,相邻8的方向的水池合并在一起看做一个水池,求一共有多少个水池。
#include<stdio.h>#include<string.h>#include<iostream>using namespace std;char map[110][110];int vis[110][110];int m,n,sum;int dirx[8]={0,0,1,-1,1,-1,1,-1};int diry[8]={1,-1,0,0,1,-1,-1,1};void dfs(int a,int b){ vis[a][b]=1; for(int i=0;i<8;i++) { int x=a+dirx[i]; int y=b+diry[i]; if(0<x&&x<=m&&0<y&&y<=n&&map[x][y]=='W') { if(vis[x][y]==0) dfs(x,y); } }} int main(){ while(scanf("%d%d",&m,&n)!=EOF) { if(m==0&&n==0) break; sum=0; getchar(); memset(vis,0,sizeof(vis)); for(int i=1;i<=m;i++) { for(int j=1;j<=n;j++) scanf("%c",&map[i][j]); getchar(); } for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) { if(vis[i][j]==0&&map[i][j]=='W') { dfs(i,j); sum++; } } printf("%d\n",sum); } return 0;}