Blue Bridge Cup_BFS_Global Warming

 

// BFS
#include<bits/stdc++.h>
using namespace std;
#define mem( a,v ) memset( a,v,sizeof( a ) )

const int N=1111;
char mp[N][N];
bool used[N][N];

int dx[4]={ -1,1,0,0 };
int dy[4]={ 0,0,-1,1 };

int flag=1;

void bfs( int x,int y )
{
    queue< pair<int,int> > q;
    pair< int,int > t;
    int nx,ny,i;

    q.push( { x,y } );
    used[x][y]=1;

    while( q.size() )
    {
        t=q.front(); q.pop();
        
        for( i=0;i<4;i++ )
        {
            nx=t.first+dx[i],ny=t.second+dy[i];
            if( mp[nx][ny]!='#' ) break;
        }
        if( i==4 ) flag=1;

        for( i=0;i<4;i++ )
        {
            nx=t.first+dx[i],ny=t.second+dy[i];
            if( used[nx][ny]==0 && mp[nx][ny]=='#' )
            {
                used[nx][ny]=1;         //
                q.push( { nx,ny } );
            }
        }
    }
}

void init() { mem( mp,0 ); mem( used,0 ); }

int main()
{
    int n,i,j,ans;

    while( cin>>n )
    {
        init();
        for( i=0;i<n;i++ )
        {
            cin.get();
            for( j=0;j<n;j++ ) cin>>mp[i][j];
        }

        ans=0;
        for( i=0;i<n;i++ )
            for( j=0;j<n;j++ )
                if( used[i][j]==0 && mp[i][j]=='#' )
                {
                    flag=0;
                    bfs( i,j );
                    if( flag==0 ) ans++;
                }
        cout<<ans<<endl;
    }
    return 0;
}

Guess you like

Origin blog.csdn.net/qq_63173957/article/details/123666076