• The Game of Life (队列+map)


    https://nanti.jisuanke.com/t/A1537

    我之前写的时候还用了set  一直超时 去掉就好了

    #include<bits/stdc++.h>
    using namespace std;
    char mp[1005][1005];
    int fx[8]={0,1,0,-1,1,1,-1,-1};
    int fy[8]={1,0,-1,0,1,-1,-1,1};
    int a[600];
    int k1;
    struct node
    {
        int x1,y1;
    }qu[10005];
    int check(int ans)
    {
        int i,j;
        map<int,int>m;
        vector<int>ve;
        for(i=0;i<k1;i++)//活的放队列 每次取出来 他旁边的位置标记+1
        {
            node q=qu[i];
            ve.push_back(q.x1*10000+q.y1);//另外 注意这个,另存一下每个点 就是第27行代码
            for(j=0;j<8;j++)
            {
                int xxx=q.x1+fx[j],yyy=q.y1+fy[j];
                m[xxx*10000+yyy]++;
            }
        }
        for(i=0;i<ve.size();i++)
        {
            int c=ve[i];
            if(m[c]==0)m[c]=1;//如果他旁边都没有活的,也把他放到map里 为了剪去它(记为1 因为如果它旁边只有一个活的他也还是会死)
        }
        k1=0;
        map<int,int >::iterator it;
        for(it=m.begin();it!=m.end();it++)
        {
            int f=it->first,s=it->second;
            int xxx=f/10000,yyy=f%10000;
            if(mp[xxx][yyy]=='#')
            {
                if(s<2||s>3)mp[xxx][yyy]='.',ans--;
                else if(s>=2&&s<=3)qu[k1].x1=xxx,qu[k1++].y1=yyy;
            }
            else
            {
                if(s==3)
                {
                    mp[xxx][yyy]='#',ans++;
                    qu[k1].x1=xxx,qu[k1++].y1=yyy;
                }
            }
        }
        return ans;
    }
    int main()
    {
        int i,j,t;
        scanf("%d",&t);
        while(t--)
        {
            int n,m;
            memset(a,0,sizeof(a));
            scanf("%d%d",&n,&m);
            getchar();
            k1=0;
            for(i=1;i<=n;i++)
            {
                for(j=1;j<=m;j++)
                {
                    scanf("%c",&mp[i+500][j+500]);
                    if(mp[i+500][j+500]=='#')a[0]++,qu[k1].x1=i+500,qu[k1++].y1=j+500;
                }
                getchar();
            }
            int minn=a[0],mi=0;
            for(int k=1;k<=321;k++)
            {
                a[k]=check(a[k-1]);
                if(a[k]>minn)
                {
                    minn=a[k],mi=k;
                }
            }
            for(i=0;i<k1;i++)
            {
                node q=qu[i];
                if(mp[q.x1][q.y1]=='#')mp[q.x1][q.y1]='.';//初始化
            }
            cout<<mi<<" "<<minn<<" "<<a[321]<<endl;
        }
        return 0;
     }
  • 相关阅读:
    爬虫
    Django
    python多线程
    python基础
    深度学习_1_Tensorflow_1
    人工智能_5_决策树_随机森林
    人工智能_4_k近邻_贝叶斯_模型评估
    人工智能_3_机器学习_概述
    Python re 模块
    Python函数式编程
  • 原文地址:https://www.cnblogs.com/ydw--/p/11404016.html
Copyright © 2020-2023  润新知