XDU Problem 1039 - Qinz`s Game

来源:互联网 发布:巨人网络最新股价 编辑:程序博客网 时间:2024/06/05 18:39

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

#include<cstdio>#include<cstring>#include<iostream>#include<queue>#define MAX 55using 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;}

原创粉丝点击