scope

· · 个人记录

#include<bits/stdc++.h>
using namespace std;
int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
int n,m;
vector <vector <char> > mp;
struct Pair{
    int x,y;
};
bool check(Pair p)
{
    return p.x>=1&&p.x<=n&&p.y>=1&&p.y<=m&&mp[p.x][p.y]!='E';
}
bool Bfs(Pair st)
{
    map <char,int> fmp;
    deque <Pair> dq;
    dq.push_back(st);
    while(!dq.empty())
    {
        Pair cur=dq.front();
        dq.pop_front();
        fmp[mp[cur.x][cur.y]]++;
        mp[cur.x][cur.y]='E';
        for(int i=0;i<4;i++)
        {
            Pair next={cur.x+dx[i],cur.y+dy[i]};
            if(check(next))
                dq.push_back(next);
        }
    }
    return fmp['T']>=2&&fmp['W']>=1&&fmp['H']>=3&&fmp['Y']>=2;
}
int cnt;
int main()
{
    scanf("%d%d",&n,&m);
    mp.resize(n+1,vector<char>(m+1));
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            cin>>mp[i][j];
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            if(mp[i][j]!='E')
                cnt+=Bfs({i,j});
    printf("%d\n",cnt);
    return 0;
}