生命游戏
Time Limit:1000MS Memory Limit:65536K
Total Submit:164 Accepted:65
Description
生命游戏(Game of life)由英国数学家John Conway在1970年发明。事实上,它是一个“零人游戏”,也没有胜负之分,而是相当于一个确定性自动机。
游戏在N×M的细胞组成的矩阵里进行,每个细胞每个时刻的状态可能是“存活”或者“休眠”两种,细胞矩阵的状态会按以下规则进行演化:
一个存活状态的细胞,在某一秒,若周围的存活状态的细胞数目不足两个,则下一秒将由于孤独而进入休眠状态。
一个存活状态的细胞,在某一秒,若周围的存活状态的细胞数目超过三个,则下一秒将由于过度拥挤而进入休眠状态。
一个存活状态的细胞,在某一秒,若周围的存活状态的细胞数目为两或三个,则下一秒将继续保持存活状态。
一个休眠状态的细胞,在某一秒,若周围的存活状态的细胞数目为正好三个,则认为是比较适合生存的状态,将于下一秒进入存活状态。
这里“周围”的范围包括一个细胞的上、下、左、右、左上、左下、右上、右下的细胞,如果存在的话。
现在,给定一个初始状态(即第1秒时的状态),请按照规则计算第T秒时的状态。
Input
第一行,三个空格隔开的整数:M、N和T。
第二行开始的N行,每行M个字符,“0”或“1”分别代表休眠状态与存活状态的细胞。
Output
输出N行,每行M个“0”或“1”,表示第T秒时的状态。
Sample Input
5 5 1
00000
01100
01010
00100
00000
Sample Output
00000
01100
01010
00100
00000
Hint
1 <= N, M <= 100
1 <= T <= 64
Source
VIJOS P1415
模拟吧……应该是这个意思,比较水就直接放代码
#include<iostream>
#include<cstdio>
using namespace std;
int dx[8]={-1,-1,0,1,1,1,0,-1};
int dy[8]={0,1,1,1,0,-1,-1,-1};
char a[100][100],b[100][100];//a是原图,b是输出的图
int m,n,t,i,j,k,p,cnt,tx,ty;
int main(){
scanf("%d%d%d",&m,&n,&t);
for(i=0;i<n;i++)scanf("%s",&a[i]);
for(k=2;k<=t;k++){
for(i=0;i<n;i++)
for(j=0;j<m;j++)b[i][j]=a[i][j];
for(i=0;i<n;i++)
for(j=0;j<m;j++){
cnt=0;
for(p=0;p<8;p++){
tx=i+dx[p];
ty=j+dy[p];
if((tx>=0)&&(tx<n)&&(ty>=0)&&(ty<m)&&(b[tx][ty]=='1'))cnt++;
}
if((a[i][j]=='1')&&((cnt<2)||(cnt>3)))a[i][j]='0';
if((a[i][j]=='0')&&(cnt==3))a[i][j]='1';
}
}
for(i=0;i<n;i++){
for(j=0;j<m;j++)printf("%c",a[i][j]);
printf("\n");
}
}