ZJNU 2208

在图的最外面套一层0(防止到头)

然后搜索图有多少块在

'0'有两块0,一块1

'1'有一块0,一块1

其余情况不存在

#include<stdio.h>
int n,m,z[2],dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};
char s[102][103];
void dfs(int x,int y){
    if(x<0||x>=n||y<0||y>=m)
        return;
    char c=s[x][y];
    s[x][y]='.';
    for(int i=0;i<4;i++){
        int xx=x+dx[i],yy=y+dy[i];
        if(s[xx][yy]==c)
            dfs(xx,yy);
    }
}
int main(){
    int i,j;
    while(~scanf("%d%d",&n,&m)){
        n+=2;m+=2;
        for(i=0;i<m;i++)
            s[0][i]=s[n-1][i]='0';
        for(i=1;i<n-1;i++){
            scanf("%s",s[i]+1);
            s[i][0]=s[i][m-1]='0';
        }
        for(z[0]=z[1]=i=0;i<n;i++)
            for(j=0;j<m;j++)
                if(s[i][j]!='.'){
                    z[s[i][j]-'0']++;
                    dfs(i,j);
                }
        if(z[0]==1&&z[1]==1)
            puts("1");
        else if(z[0]==2&&z[1]==1)
            puts("0");
        else
            puts("-1");
    }
    
    return 0;
}
原文地址:https://www.cnblogs.com/stelayuri/p/12236633.html