求dalao优化
查看原帖
求dalao优化
377983
vincent_du楼主2021/4/9 20:35

测试信息

思路

参见题解

代码

#include <iostream>
#include <cstring>
using namespace std;
const int wx[4]={-1,0,1,0};
const int wy[4]={0,-1,0,1};
int n;
int m;
bool hasblock[2002][2002];
void dfsfill(const int x,const int y){
    if(x<1||y<1||x>n||y>m){
        return;
    }
    if(hasblock[x][y]){
        return;
    }
    hasblock[x][y]=true;
    for(int w=0;w<4;w++){
        dfsfill(x+wx[w],y+wy[w]);
    }
}
int main(){
    int __T;
    cin>>__T;
    for(int _=0;_<__T;_++){
        char temp;
        int zqnum=0;
        memset(hasblock,0,sizeof(hasblock));
        cin>>n>>m;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                cin>>temp;
                if(temp=='*'){
                    hasblock[i][j]=true;
                }
            }
        }
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                if(hasblock[i][j]){
                    continue;
                }
                bool mk=true;
                for(int w=0;w<4;w++){
                    if(hasblock[i+wx[w]][j+wy[w]]){
                        mk=false;
                        break;
                    }
                }
                if(mk){
                    dfsfill(i,j);
                }
            }
        }
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                if(hasblock[i][j]){
                    continue;
                }
                zqnum++;
                dfsfill(i,j);
            }
        }
        cout<<(zqnum>1?"YES\n":"NO\n");
    }
    return 0;
}
2021/4/9 20:35
加载中...