XDU Problem 1039 - Qinz`s Game

本文介绍了一个基于广度优先搜索算法的模拟程序,该程序用于模拟从一个初始城堡出发,逐步占领周围无人占领或实力不足的城堡的过程。通过不断扩张领地来提升自身实力,直至无法再占领新的城堡为止。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

每天从所占城堡中广搜看是否有周围的城堡能够被占领,如果能就加入,如果没人一个可以占领。输出NO

#include<cstdio>
#include<cstring>
#include<iostream>
#include<queue>
#define MAX 55
using namespace std;
int map[MAX][MAX],n,m,vis[MAX][MAX],x[MAX*MAX],y[MAX*MAX],k,power;
int dx[4]={-1,1,0,0};
int dy[4]={0,0,-1,1};
int search()
{
    int m_c=0;
    int now=k;
    for(int i=0;i<now;i++)
    {
        int nx=x[i],ny=y[i];
        for(int j=0;j<4;j++)
        {
            int u=nx+dx[j],v=ny+dy[j];
            if(u<0||u>=n||v<0||v>=m||vis[u][v]||map[u][v]>=power) continue;
            vis[u][v]=1;
            x[k]=u;y[k++]=v;
            m_c++;
        }
    }
    return m_c;
}
int main()
{
    //freopen("data.txt","r",stdin);
    int T;
    cin>>T;
    while(T--)
    {
        memset(map,0,sizeof(map));
        memset(vis,0,sizeof(vis));
        k=0;
        int castle=1,day=0,flag=1;
        cin>>n>>m;
        //cout<<n<<" "<<m<<endl;
        for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
        cin>>map[i][j];
        cin>>x[k++]>>y[k];                //从右到左
        x[0]--;y[0]--;

        //cout<<x[0]<<" "<<y[0]<<endl;
        power=map[x[0]][y[0]];
        vis[x[0]][y[0]]=1;
        //cout<<power<<endl;

        while(castle<n*m)
        {
            int t=search();
            //cout<<t<<endl;
            if(t==0) {flag=0;break;}
            day++;
            castle+=t;
            power+=t;
        }
        if(flag) printf("YES %d\n",day);
        else printf("NO %d\n",castle);
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值