2 条题解

  • -1
    @ 2022-12-23 21:56:12

    这道题非常的水啊

    首先搜索 maijiajun 可以走的格子。

    然后在这些格子里面再去枚举每一个格子放炸弹能炸死多少个僵尸。

    最后取一个最大值这道题就做完了

    #include<iostream>
    using namespace std;
    int n,m,ax,ay;
    char a[101][101];
    bool vis[109][109];
    void dfs(int x,int y){//搜索maijiajun可以走的地方
        const int dx[]={0,0,-1,1},dy[]={-1,1,0,0};
        for(int i=0;i<4;i++){
            int xx=dx[i]+x;
            int yy=dy[i]+y;
            if(xx<1||yy<1||xx>n||yy>m||a[xx][yy]=='#'||a[xx][yy]=='G'||vis[xx][yy]==1){
                continue;
            }
            vis[xx][yy]=1;
            dfs(xx,yy);
        }
    }
    int sum(int x,int y){//每一个地方放炸弹所可以炸死的僵尸数量
        int sum=0;
        for(int i=x;i>=1;i--){
            if(a[x][i]=='#'){
                break;
            }
            if(a[x][i]=='G'){
                sum++;
            }
        }
        for(int i=x+1;i<=n;i++){
            if(a[x][i]=='#'){
                break;
            }
            if(a[x][i]=='G'){
                sum++;
            }
        }
        for(int i=y;i>=1;i--){
            if(a[i][y]=='#'){
                break;
            }
            if(a[i][y]=='G'){
                sum++;
            }
        }
        for(int i=y+1;i<=m;i++){
            if(a[i][y]=='#'){
                break;
            }
            if(a[i][y]=='G'){
                sum++;
            }
        }
        return sum;
    }
    int main(){
        cin>>n>>m>>ax>>ay;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                cin>>a[i][j];
            }
        }
        dfs(ax,ay);
        int ans=0;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                if(vis[i][j]==1){
                    ans=max(ans,sum(i,j));
                }
            }
        }
        cout<<ans;
    }
    

    信息

    ID
    42
    时间
    1000ms
    内存
    256MiB
    难度
    6
    标签
    递交数
    9
    已通过
    8
    上传者