The Game of Life (队列+map)

Posted ydw--

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
 

 

以上是关于The Game of Life (队列+map)的主要内容,如果未能解决你的问题,请参考以下文章

289. Game of Life

Game of Life

Rust Wasm - The Game Of Life 教程未能编译 webpack-dev-server [关闭]

leetcode289- Game of Life- medium

Conway's Game of Life

289. Game of Life