您的位置:首页 > 其它

【模拟】【RQNOJ】生命游戏

2010-07-13 19:52 363 查看

题目描述

生命游戏(Game of life)由英国数学家John Conway在1970年发明。事实上,它是一个“零人游戏”,也没有胜负之分,而是相当于一个确定性自动机。
游戏在N×M的细胞组成的矩阵里进行,每个细胞每个时刻的状态可能是“存活”或者“休眠”两种,细胞矩阵的状态会按以下规则进行演化:
一个存活状态的细胞,在某一秒,若周围的存活状态的细胞数目不足两个,则下一秒将由于孤独而进入休眠状态。
一个存活状态的细胞,在某一秒,若周围的存活状态的细胞数目超过三个,则下一秒将由于过度拥挤而进入休眠状态。
一个存活状态的细胞,在某一秒,若周围的存活状态的细胞数目为两或三个,则下一秒将继续保持存活状态。
一个休眠状态的细胞,在某一秒,若周围的存活状态的细胞数目为正好三个,则认为是比较适合生存的状态,将于下一秒进入存活状态。
这里“周围”的范围包括一个细胞的上、下、左、右、左上、左下、右上、右下的细胞,如果存在的话。
现在,给定一个初始状态(即第1秒时的状态),请按照规则计算第T秒时的状态。

数据范围
1 <= N, M <= 100
1 <= T <= 64

输入格式

第一行,三个空格隔开的整数:M、N和T。
第二行开始的N行,每行M个字符,“0”或“1”分别代表休眠状态与存活状态的细胞。

输出格式

输出N行,每行M个“0”或“1”,表示第T秒时的状态。

样例输入

#include<stdio.h>
char a[2][101][101];
int n,m,t,now,last;
int xx[8]={0,1,1,1,0,-1,-1,-1};
int yy[8]={-1,-1,0,1,1,1,0,-1};
int check(int x,int y)
{
int tot=0;
for (int i=0;i<8;++i)
{
int tex=x+xx[i],tey=y+yy[i];
if (tex>0&&tex<=n&&tey>0&&tey<=m)
if (a[last][tex][tey]=='1')
++tot;
}
return tot;
}
int main()
{
freopen("s.txt","r",stdin);
scanf("%d%d%d",&m,&n,&t);
now=1; last=0;
for (int i=1;i<=n;++i)
{
char s[1000];
scanf("%s",s);
for (int j=1;j<=m;++j)
a[now][i][j]=s[j-1];
}
for (int tt=2;tt<=t;++tt)
{
if (now==1)
{
now=0;
last=1;
}
else
{
now=1;
last=0;
}
for (int i=1;i<=n;++i)
for (int j=1;j<=m;++j)
{
int tot=check(i,j);
if (a[last][i][j]=='0')
if (tot==3) a[now][i][j]='1';
else a[now][i][j]='0';
else
if ((tot<2)||(tot>3)) a[now][i][j]='0';
else a[now][i][j]='1';
}
}
for (int i=1;i<=n;++i)
{
for (int j=1;j<=m;++j) printf("%c",a[now][i][j]);
printf("/n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: