【模拟】【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; }
相关文章推荐
- C++: 生命游戏(模拟细胞群演化)
- QT 生命游戏模拟
- QT 生命游戏模拟
- 用 React + es6 完成一个著名的生命游戏(Game of life,Conway)
- 51nod--1185 威佐夫游戏 V2 (博弈, 乘法模拟)
- Android 手机模拟游戏手柄(USB,C#,winio)
- 元胞自动机+生命游戏
- 模拟现实网络游戏
- 康威生命游戏(Conway's Game of Life)的一种实现
- 睡觉请关灯 游戏模拟实现
- ACM之八数码问题----BFS搜索----数独游戏的模拟(上)
- [NOIP2017模拟]豆豆游戏
- 康威生命游戏的学习
- Windows Mobile 6 模拟器绿色中文版 - 在PC上模拟并运行智能手机的软件游戏
- 【模拟】【RQNOJ】种菊
- 【模拟】【RQNOJ】统计数字
- 【模拟】【RQNOJ】汇编语言
- 【博弈论】【RQNOJ】取棋子游戏
- java模拟生存RPG游戏开发
- bzoj 1666: [Usaco2006 Oct]Another Cow Number Game 奶牛的数字游戏【模拟】