P1596 [USACO10OCT]Lake Counting S

flood-fill

const int N=110;
char g[N][N];
int n,m;
int res;

inline bool check(int x,int y)
{
    return x>=0 && x<n && y>=0 && y<m;
}

void bfs(int x,int y)
{
    queue<PII> q;
    q.push({x,y});

    while(q.size())
    {
        PII t=q.front();
        q.pop();

        for(int i=0;i<8;i++)
        {
            int a=t.fi+dx8[i],b=t.se+dy8[i];
            if(!check(a,b)) continue;
            if(g[a][b] == 'W')
            {
                g[a][b]='.';
                q.push({a,b});
            }
        }
    }
}

int main()
{
    cin>>n>>m;

    for(int i=0;i<n;i++) scanf("%s",&g[i]);

    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            if(g[i][j] == 'W')
                bfs(i,j),res++;

    cout<<res<<endl;

    //system("pause");
}

dfs

const int N=110;
char g[N][N];
int n,m;
int res;

inline bool check(int x,int y)
{
    return x>=0 && x<n && y>=0 && y<m;
}

void dfs(int x,int y)
{
    if(g[x][y] == '.') return;

    g[x][y]='.';
    for(int i=0;i<8;i++)
    {
        int a=x+dx8[i],b=y+dy8[i];
        if(check(a,b) && g[a][b] == 'W')
            dfs(a,b);
    }
}

int main()
{
    cin>>n>>m;

    for(int i=0;i<n;i++) scanf("%s",&g[i]);

    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            if(g[i][j] == 'W')
                dfs(i,j),res++;

    cout<<res<<endl;

    //system("pause");
}
原文地址:https://www.cnblogs.com/fxh0707/p/13695499.html