生命游戏 题解

生命游戏(Game of life)由英国数学家John Conway1970年发明。事实上,它是一个“零人游戏”,也没有胜负之分,而是相当于一个确定性自动机。

游戏在N×M的细胞组成的矩阵里进行,每个细胞每个时刻的状态可能是“存活”或者“休眠”两种,细胞矩阵的状态会按以下规则进行演化:

一个存活状态的细胞,在某一秒,若周围的存活状态的细胞数目不足两个,则下一秒将由于孤独而进入休眠状态。

一个存活状态的细胞,在某一秒,若周围的存活状态的细胞数目超过三个,则下一秒将由于过度拥挤而进入休眠状态。

一个存活状态的细胞,在某一秒,若周围的存活状态的细胞数目为两或三个,则下一秒将继续保持存活状态。

一个休眠状态的细胞,在某一秒,若周围的存活状态的细胞数目为正好三个,则认为是比较适合生存的状态,将于下一秒进入存活状态。

这里“周围”的范围包括一个细胞的上、下、左、右、左上、左下、右上、右下的细胞,如果存在的话。

现在,给定一个初始状态(即第1秒时的状态),请按照规则计算第T秒时的状态。

输入格式

第一行,三个空格隔开的整数:MNT

第二行开始的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.

你可能感兴趣的:(题解)