细胞(bfs)

发布时间 2023-07-22 17:05:52作者: siuuuuuuuu
#include<bits/stdc++.h>
using namespace std;
int dx[4]={1,-1,0,0},
    dy[4]={0,0,1,-1};
int bz[100][100]={1},num=0;
char s[100][100],ch;
bool vis[100][100];
int m,n;
void bfs(int p,int q){
    int x,y,t,w,i;
    int h[1000][3];
    num++;bz[p][q]=0;
    t=0;w=1;
    h[1][1]=p;
    h[1][2]=q;
    vis[p][q]=true;
    while(t<w){
        t++;
        for(int i=0; i<=3; i++){
            x=h[t][1]+dx[i];
            y=h[t][2]+dy[i];
            if((x>=0)&&(x<m)&&(y>=0)&&(y<n)&&(bz[x][y]!=0)&&!vis[x][y]){
                w++;
                h[w][1]=x;
                h[w][2]=y;
                bz[x][y]=0;
                vis[x][y]=true;
            }
        }
    }
}
int main()
{
    cin>>m>>n;
    for(int i=0; i<=m-1; i++)
        for(int j=0; j<=n-1; j++)
            bz[i][j]=1;
    for(int i=0; i<=m-1; i++){
        for(int j=0; j<=n-1; j++){
            cin>>s[i][j];
            if(s[i][j]=='0') bz[i][j]=0;
        }        
    }
    for(int i=0; i<=m-1; i++)
        for(int j=0; j<=n-1; j++)
            if(bz[i][j]!=0&&!vis[i][j]) bfs(i,j);
    cout<<num<<endl;        
    return 0;
}