poj 2386 Lake counting(深度优先搜索)

来源:互联网 发布:火辣健身软件 编辑:程序博客网 时间:2024/05/29 14:22

题目链接:点击打开链接


dfs水题。

1代表有水,0代表没有水

遍历整个地图,首先遇到一个有水的地方就先把答案加1,然后对这个格子的8个方向进行dfs,遇到1就把他变成0。然后一直遍历到最后得到最终答案。


代码:

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int a[105][105];int dis[8][2]={{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}};int N,M;void solve(int x,int y){    a[x][y]=0;    for(int i=0;i<8;i++){        int tx=x+dis[i][0];        int ty=y+dis[i][1];        if(a[tx][ty]) solve(tx,ty);    }    return ;}int main(){    scanf("%d%d",&N,&M);    for(int i=1;i<=N;i++){        getchar();        for(int j=1;j<=M;j++){            char c;            scanf("%c",&c);            if(c=='W') a[i][j]=1;        }    }    int res=0;    for(int i=1;i<=N;i++){        for(int j=1;j<=M;j++){            if(a[i][j]){                solve(i,j);                res++;            }        }    }    printf("%d",res);    return 0;}


0 0
原创粉丝点击