您的位置:首页 > 其它

生命游戏 题解

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

输入格式

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

输出格式

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

样例输入

5 5 1
00000
01100
01010
00100
00000

样例输出

00000
01100
01010
00100
00000

数据范围

1 <= N, M <= 100
1 <= 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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: