生命游戏(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.