orzchy

洛谷P1596 [USACO10OCT]湖计数Lake Counting

https://www.luogu.org/problemnew/show/P1596

连通块水题...

大体思路是找到是水坑的坐标然后就开始不断递归,往八个方向搜,把连在一起的都标记一遍直到找不到为止

以下是本蒟蒻的代码

#include <bits/stdc++.h>//万能头 
using namespace std;
char a[101][101];
int fx[9]={0,-1,-1,-1,0,0,1,1,1};//x方向 
int fy[9]={0,-1,0,1,-1,1,-1,0,1};//y方向 
int n,m,ans=0;
void dfs(int x,int y) {
    a[x][y]='.';//标记已经搜过 
    int dx,dy;
    for(int i=0; i<=8; i++) {
        dx=x+fx[i];
        dy=y+fy[i];
        if(dx<1||dx>n||dy<1||dy>m||a[dx][dy]=='.') continue;//判断是否越界或已经搜过 
        dfs(dx,dy);//接着往八个方向搜
    }
}
int main() {
    cin>>n>>m;
    for(int i=1; i<=n; i++) {
        for(int j=1; j<=m; j++) {
            cin>>a[i][j];
        }
    }
    for(int i=1; i<=n; i++) {
        for(int j=1; j<=m; j++) {
            if(a[i][j]=='W') {//找到水坑开始搜 
                dfs(i,j);
                ans++;//水坑+1 
            }
        }
    }
    cout<<ans;//输出 
    return 0;
}

 

posted on 2019-03-15 17:24  orzchy  阅读(284)  评论(0编辑  收藏  举报

导航