生命游戏 题解
2009-07-09 09:58
363 查看
生命游戏(Game of life)由英国数学家John Conway在1970年发明。事实上,它是一个“零人游戏”,也没有胜负之分,而是相当于一个确定性自动机。
游戏在N×M的细胞组成的矩阵里进行,每个细胞每个时刻的状态可能是“存活”或者“休眠”两种,细胞矩阵的状态会按以下规则进行演化:
一个存活状态的细胞,在某一秒,若周围的存活状态的细胞数目不足两个,则下一秒将由于孤独而进入休眠状态。
一个存活状态的细胞,在某一秒,若周围的存活状态的细胞数目超过三个,则下一秒将由于过度拥挤而进入休眠状态。
一个存活状态的细胞,在某一秒,若周围的存活状态的细胞数目为两或三个,则下一秒将继续保持存活状态。
一个休眠状态的细胞,在某一秒,若周围的存活状态的细胞数目为正好三个,则认为是比较适合生存的状态,将于下一秒进入存活状态。
这里“周围”的范围包括一个细胞的上、下、左、右、左上、左下、右上、右下的细胞,如果存在的话。
现在,给定一个初始状态(即第1秒时的状态),请按照规则计算第T秒时的状态。
第二行开始的N行,每行M个字符,“0”或“1”分别代表休眠状态与存活状态的细胞。
00000
01100
01010
00100
00000
01100
01010
00100
00000
1 <= T <= 64
游戏在N×M的细胞组成的矩阵里进行,每个细胞每个时刻的状态可能是“存活”或者“休眠”两种,细胞矩阵的状态会按以下规则进行演化:
一个存活状态的细胞,在某一秒,若周围的存活状态的细胞数目不足两个,则下一秒将由于孤独而进入休眠状态。
一个存活状态的细胞,在某一秒,若周围的存活状态的细胞数目超过三个,则下一秒将由于过度拥挤而进入休眠状态。
一个存活状态的细胞,在某一秒,若周围的存活状态的细胞数目为两或三个,则下一秒将继续保持存活状态。
一个休眠状态的细胞,在某一秒,若周围的存活状态的细胞数目为正好三个,则认为是比较适合生存的状态,将于下一秒进入存活状态。
这里“周围”的范围包括一个细胞的上、下、左、右、左上、左下、右上、右下的细胞,如果存在的话。
现在,给定一个初始状态(即第1秒时的状态),请按照规则计算第T秒时的状态。
输入格式
第一行,三个空格隔开的整数:M、N和T。第二行开始的N行,每行M个字符,“0”或“1”分别代表休眠状态与存活状态的细胞。
输出格式
输出N行,每行M个“0”或“1”,表示第T秒时的状态。样例输入
5 5 100000
01100
01010
00100
00000
样例输出
0000001100
01010
00100
00000
数据范围
1 <= N, M <= 1001 <= T <= 64
var i,j,k,m,n,t,d,l,x,y:longint; a:array[0..1001,0..1001] of longint; st:string; procedure count; var i1,j1,k1:longint; begin l:=0;d:=0; if a[j,k+1]=1 then inc(l) else inc(d); if a[j,k-1]=1 then inc(l) else inc(d); if a[j+1,k]=1 then inc(l) else inc(d); if a[j-1,k]=1 then inc(l) else inc(d); if a[j+1,k+1]=1 then inc(l) else inc(d); if a[j-1,k+1]=1 then inc(l) else inc(d); if a[j-1,k-1]=1 then inc(l) else inc(d); if a[j+1,k-1]=1 then inc(l) else inc(d); end; begin assign(input,'life.in');reset(input); assign(output,'life.out');rewrite(output); readln(m,n,t); fillchar(a,sizeof(a),0); for i:=1 to n do begin read(st); for j:=1 to m do if st[j]='0' then a[i,j]:=0 else a[i,j]:=1; readln; end; for i:= 1 to t-1 do begin for j:=1 to n do begin for k:=1 to m do begin count; if a[j,k]=0 then begin if l=3 then a[j,k]:=1; end else if a[j,k]=1 then begin if l<2 then a[j,k]:=0; if l>3 then a[j,k]:=0; end; end; end; end; for i:=1 to n do begin for j:=1 to m do write(a[i,j]); writeln; end; close(input);close(Output); end.
相关文章推荐
- 9265:取数游戏 题解
- python数据分析:生命游戏
- 一个关于生命游戏的程序
- matlab下整了个元宝自动机,俗称“生命游戏”
- bzoj 1025 [SCOI2009] 游戏 题解
- C++: 生命游戏(模拟细胞群演化)
- “生命游戏”的多线程算法思考
- LeetCode 289. Game of Life(生命游戏)
- Python,OpenGL生命游戏
- HDU 棋盘游戏 题解
- BZOJ 1022 [SHOI2008]小约翰的游戏John 题解与分析
- 生命游戏
- 【模拟】【RQNOJ】生命游戏
- 【树链剖分+李超线段树】BZOJ4515(Sdoi2016)[游戏]题解
- 3D塔防游戏实现 3 怪物门以及生命塔(Feekood语言)
- 生命游戏
- C++ 生命游戏
- 【转载】【元胞自动机】生命游戏(时间简史)
- 【Day2P3,头痛的博弈】取石子游戏 题解
- React项目(二):生命游戏