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)的主要内容,如果未能解决你的问题,请参考以下文章
Rust Wasm - The Game Of Life 教程未能编译 webpack-dev-server [关闭]