dfs求连通块(围棋 poj)

来源:互联网 发布:万网域名转出 编辑:程序博客网 时间:2024/04/28 14:39

//池塘青草块数问题(poj)同

#include<iostream>

#include<cstring>
#include<cstdio>
using namespace std;
int a,b=0,c=0,d,e;
char shz1[100+10][100+10];
int shz2[100+10][100+10];
void dfs(int i,int j){
    if(i<0||i>=a||j<0||j>=a)return ;
    if(shz2[i][j]==1)return ;
    if(shz1[i][j]=='W'){
        d=1;
        return;
    }
    if(shz1[i][j]=='B'){
        d=2;
        return;
    }
    shz2[i][j]=1;
    e++;
    dfs(i-1,j);
    dfs(i+1,j);
    dfs(i,j-1);
    dfs(i,j+1);
}
int main(){
    cin>>a;
    memset(shz2,0,sizeof(shz2));
    for(int i=0;i<a;i++){
        for(int j=0;j<a;j++){
            cin>>shz1[i][j];
            if(shz1[i][j]=='B')b++;
            else if(shz1[i][j]=='W')c++;
        }
    }
    for(int i=0;i<a;i++){
        for(int j=0;j<a;j++){
            e=0;
            if(shz1[i][j]=='.')dfs(i,j);
            if(d==1)c+=e;
            else if(d==2)b+=e;
        }
    }
    printf("%d %d",b,c);
    return  0;

}

//躺过的简单题,哭

0 0
原创粉丝点击