• CF1365D Solve The Maze(dfs)


    如果好人和坏人挨在一起肯定不行

    否则讲坏人周围的一圈全部围起来,这样是最优的

    之后从n,m处看看能否经过所有的好人

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=6e5+10;
    char s[60][60];
    int dx[]={-1,0,1,0};
    int dy[]={0,1,0,-1};
    int vis[60][60];
    int res;
    int n,m;
    void dfs(int x,int y){
        int i;
        for(i=0;i<4;i++){
            int a=x+dx[i];
            int b=y+dy[i];
            if(a&&a<=n&&b&&b<=m&&(!vis[a][b])){
                if(s[a][b]=='#')
                    continue ;
                vis[a][b]=1;
                if(s[a][b]=='G'){
                    res++;
                }
                dfs(a,b);
            }
        }
    }
    int main(){
        ios::sync_with_stdio(false);
        int t;
        cin>>t;
        while(t--){
            memset(vis,0,sizeof vis);
            cin>>n>>m;
            int i,j;
            int gcnt=0;
            int sign=0;
            for(i=1;i<=n;i++){
                for(j=1;j<=m;j++){
                    cin>>s[i][j];
                }
            }
            for(i=1;i<=n;i++){
                for(j=1;j<=m;j++){
                    if(s[i][j]=='G')
                        gcnt++;
                    else if(s[i][j]=='B'){
                        int k;
                        //cout<<i<<" "<<j<<endl;
                        for(k=0;k<4;k++){
                            int a=i+dx[k];
                            int b=j+dy[k];//cout<<a<<" "<<b<<endl;
                            if(a&&a<=n&&b&&b<=m){
                                if(s[a][b]=='G'){
                                    sign=1;
                                    break;
                                }
                                else if(s[a][b]=='.'){
                                    s[a][b]='#';
                                }
                            }
                        }
                    }
                }
            }
            res=0;
            if(sign){
                cout<<"NO"<<endl;
                continue;
            }
            if(s[n][m]!='#'){
                vis[n][m]=1;
                dfs(n,m);
            }
            if(res==gcnt)
                cout<<"YES"<<endl;
            else
                cout<<"NO"<<endl;
        }
    }
    View Code
  • 相关阅读:
    maven下载源配置
    nvm及node下载源配置
    SourceInsight 添加Symbol Lookup路径
    8.31-使用vscode进行c/c++程序设计
    10.08-vscode-plantuml建模
    6.26-vscode 配置文件
    3.5-VSCode 学习
    3.6-WizNote 常用快捷键
    10.04-CTEST-GTest
    180325-log4cplus
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/13269891.html
Copyright © 2020-2023  润新知