P1596 [USACO10OCT]Lake Counting S(C语言)

P1596 [USACO10OCT]Lake Counting S(C语言)

P1596 [USACO10OCT]Lake Counting S(C语言)_第1张图片

思路

首先根据题目要求,输入行和列。
之后便将二维数组填充。
进入搜索的条件:水坑,也就是a[i][j]=='W',进入搜索,则需要将每个水坑进行标记。
这道题:检测连通性

源码

#include
char a[101][101];
int n,m;
int sum;

void dfs(int x,int y){
    int dx,dy;
    a[x][y]='.';   //标记
    for(int i=-1;i<=1;i++){    //4个方向开始寻找
        for(int j=-1;j<=1;j++){
            dx=x+i;
            dy=y+j;
            if(dx>=0 && dx<n && dy>=0 && dy<m && a[dx][dy]=='W' )   //边界
                dfs(dx,dy);
        }
    }
    return ;
}

int main(){
    scanf("%d %d",&n,&m);
    for(int i=0;i<n;i++)  //输入每行的字符
        scanf("%s",&a[i]);
    
       
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            if(a[i][j]=='W'){
                dfs(i,j);   //起点
                sum++;
            }
                
        }
    }
    printf("%d",sum);
}

你可能感兴趣的:(#,搜索,洛谷)