生命游戏。

生命游戏其实是一个零玩家游戏,它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞。一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死了的细胞的数量。如果相邻方格活着的细胞数量过多,这个细胞会因为资源匮乏而在下一个时刻死去;相反,如果周围活细胞过少,这个细胞会因太孤单而死去。实际中,你可以设定周围活细胞的数目怎样时才适宜该细胞的生存。如果这个数目设定过高,世界中的大部分细胞会因为找不到太多的活的邻居而死去,直到整个世界都没有生命;如果这个数目设定过低,世界中又会被生命充满而没有什么变化。实际中,这个数目一般选取2或者3;这样整个生命世界才不至于太过荒凉或拥挤,而是一种动态的平衡。这样的话,游戏的规则就是:当一个方格周围有2或3个活细胞时,方格中的活细胞在下一个时刻继续存活;即使这个时刻方格中没有活细胞,在下一个时刻也会“诞生”活细胞。在这个游戏中,还可以设定一些更加复杂的规则,例如当前方格的状况不仅由父一代决定,而且还考虑祖父一代的情况。你还可以作为这个世界的上帝,随意设定某个方格细胞的死活,以观察对世界的影响。

以上内容来自百度。某公司线上笔试出了这么一个编程题。模仿了有限的二维空间(x*y)的情况,输入当前时刻,得到下一时刻的状态。

代码很简单 ,运行通过了测试,当然我也不知道是否完全正确。只是记录一下,归于ACM吧 。望批评指正。

下面是我的代码():

  1 #include <iostream>
  2
  3
  4 using namespace std;
  5
  6 void Test(int x,int y);
  7 char**  imalloc(int x,int y);
  8 void ifree(int x,char** Temp);
  9 char **now    =    NULL;
 10 char **next    =    NULL;
 11
 12 int main()
 13 {
 14     int x    =    0;
 15     int y    =    0;
 16     int i = 0;
 17
 18
 19     while(cin>>x>>y)
 20     {
 21         //申请内存
 22         now    =    imalloc(x+2,y+3);    //申请(x+1)*(y+1) 外加每行后面的“\0”
 23         next=    imalloc(x,y+1);
 24
 25         //输入
 26         for (i = 0;i<x;i++)
 27         {
 28             cin>>*(now+i+1)+1;
 29
 30         }
 31         Test(x,y);
 32
 33         //输出
 34         cout<<x<<" "<<y<<endl;
 35         for (i = 0;i<x;i++)
 36         {
 37             cout<<*(next+i)<<endl;
 38         }
 39
 40         //释放内存
 41         ifree(x+2,now);
 42         ifree(x,next);
 43
 44     }
 45
 46     return 0;
 47 }
 48 char** imalloc(int x,int y)
 49 {
 50     int i    =    0;
 51
 52     char** Temp    =    new char*[x];
 53     for (i=0;i<x;i++)
 54     {
 55         *(Temp+i)    =    new char[y];
 56         memset(*(Temp+i),0,y);
 57
 58     }
 59     return Temp;
 60
 61
 62 }
 63 void ifree(int x,char** Temp)
 64 {
 65     int i =0;
 66     for (i=0;i<x;i++)
 67     {
 68         delete *(Temp+i);
 69     }
 70     delete Temp;
 71
 72 }
 73 void Test(int x,int y)
 74 {
 75
 76     int i = 0;
 77     int j = 0;
 78     for (i=0;i<x;i++)
 79     {
 80
 81         for (j=0;j<y;j++)
 82         {
 83             int iCount    =    0;
 84             //判断邻居的情况呀
 85             //左上
 86             if (now[i][j]==‘*‘)
 87             {
 88                 iCount++;
 89             }
 90             //上
 91             if (now[i][j+1]==‘*‘)
 92             {
 93                 iCount++;
 94             }
 95             //右上
 96             if (now[i][j+2]==‘*‘)
 97             {
 98                 iCount++;
 99             }
100             //左
101             if (now[i+1][j]==‘*‘)
102             {
103                 iCount++;
104             }
105             //右
106             if (now[i+1][j+2]==‘*‘)
107             {
108                 iCount++;
109             }
110             //左下
111             if (now[i+2][j]==‘*‘)
112             {
113                 iCount++;
114             }
115             //下
116             if (now[i+2][j+1]==‘*‘)
117             {
118                 iCount++;
119             }
120             //右上
121             if (now[i+2][j+2]==‘*‘)
122             {
123                 iCount++;
124             }
125
126             //判断当前位置的下一刻
127             if (now[i+1][j+1]==‘*‘)    //当前活着
128             {
129                 if (iCount<2||iCount>3)
130                 {
131                     next[i][j]    =    ‘.‘;
132                 }
133                 else if (iCount==2||iCount==3)
134                 {
135                     next[i][j]    =    ‘*‘;
136                 }
137
138             }
139             else if (now[i+1][j+1]==‘.‘)//当前死亡
140             {
141
142                 if (iCount==3)
143                 {
144                     next[i][j]    =    ‘*‘;
145                 }
146                 else
147                 {
148                     next[i][j]    =    ‘.‘;
149                 }
150             }
151
152         }
153     }
154 }
时间: 2024-10-13 20:50:52

生命游戏。的相关文章

【转载】【元胞自动机】生命游戏(时间简史)

原帖:http://www.cnblogs.com/lvpengms/archive/2010/02/08/1666095.html 晚上闲着没事干,鉴于前一段时间数学建模中看到了生命游戏 Game of Life,所以用C++实现一下,效果还不错. 本程序是用vs2005 C++编写,有意想要程序和源码的朋友可以给我发邮件. 更新:程序源码可以从这个地址下载:下载元胞自动机源码及程序 =======================================================

生命游戏和随机数之间某种不可言说的秘密

为什么我感觉随便写一个一维生命游戏规则就可以做出一个看起来很随机实际上也蛮随机的随机数生成器.... 这是代码: 1 #include <cstdio> 2 #include <fstream> 3 #include <iostream> 4 5 #include <cstdlib> 6 #include <cstring> 7 #include <algorithm> 8 #include <cmath> 9 10 #i

元胞自动机+生命游戏

元胞自动机 元胞自动机(Cellular Automaton,复数为Cellular Automata,简称CA,也有人译为细胞自动机.点格自动机.分子自动机或单元自动机).是一时间和空间都离散的动力系统.散布在规则格网 (Lattice Grid)中的每一元胞(Cell)取有限的离散状态,遵循同样的作用规则,依据确定的局部规则作同步更新.大量元胞通过简单的相互作用而构成动态系统的演化. 不同于一般的动力学模型,元胞自动机不是由严格定义的物理方程或函数确定,而是用一系列模型构造的规则构成.凡是满

生命游戏&amp;一维细胞自动机 笔记

de 生命游戏是一种简单的聚合模型,展示了事物是如何聚合的,是自动机(CA)模型的一种.由剑桥大学约翰康威发明,其规则为: 1. 每个细胞拥有八个邻居,细胞状态只有存活(黑)和死亡(白)两种: 2.处于死亡状态的细胞可以在有三个存活邻居的情况下复活: 3.存活状态的细胞在相邻有2个一下或三个以上存活细胞的情况下会死去,2-3个相邻细胞存活时会继续存活: 从而产生了信号灯.闪光灯.滑翔机.警示灯等经典的变换. 遵循简单规则的简单图像聚合一起可以形成复杂图像,甚至如活物一般能进行空间平移(自组织模型

生命游戏/Game of Life的Java实现(转)

首先简单介绍一下<生命游戏> 生命游戏其实是一个零玩家游戏.它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞.一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死了的细胞的数量.如果相邻方格活着的细胞数量过多,这个细胞会因为资源匮乏而在下一个时刻死去:相反,如果周围活细胞过少,这个细胞会因太孤单而死去.具体如下图: 每个格子的生死遵循下面的原则: 1. 如果一个细胞周围有3个细胞为生(一个细胞周围共有8个细胞),则该细胞为生(即该细胞若原先为死,则转为生,若原先为生,

LeetCode:Game of Life - 康威生命游戏

1.题目名称 Game of Life(康威生命游戏) 2.题目地址 https://leetcode.com/problems/game-of-life 3.题目内容 英文: According to the Wikipedia's article: "The Game of Life, also known simply as Life, is a cellular automaton devised by the British mathematician John Horton Conw

关于康威生命游戏的学习

 康威生命游戏,又称康威生命棋,是英国数学家约翰·何顿·康威在1970年发明的细胞自动机.它最初于1970年10月在<科学美国人>杂志上马丁·葛登能的"数学游戏"专栏出现. 一个偶然机会发现了这个美妙的生命游戏.于是开始写程序来实现它,其实实现是很简单的,我现在还只能做到这个而已,不过还会继续深究下去的.先用Random来生成随机数,这样就可以在初始的时候在随机位置设定生死细胞了.输出的时候用2个for循环就是了.昨天做的时候遇到的问题是不知道最后该怎么判断了,因为判断

【生命游戏】

/* 生命游戏 说明: 生命游戏(game of life)为1970年由英国数学家J.H.Conway所提出来,某一细胞的邻居包括上,下,左,右,左上,左下, 右上,右下相邻之细胞.游戏规则如下: 孤单死亡:如果细胞的邻居小于一个,则该细胞在下一次状态将死亡. 拥挤死亡:如果细胞的邻居在四个以上,则该细胞在再一次状态将死亡. 稳定:如果细胞的邻居为二个或三个,则下一次状态为稳定存活. 复活:如果某位置原无细胞存活,而该位置的邻居为三个,则该位置将复活一细胞. 解法: 生命游戏的规则可简化为以下

混沌,细胞自动机与生命游戏

混沌,细胞自动机与生命游戏 1.康威生命游戏的规则 生命游戏中,对于任意细胞,规则如下:每个细胞有两种状态-存活或死亡,每个细胞与以自身为中心的周围八格细胞产生互动. Ⅰ. A live square with two or three live neighbors survives (survival).Ⅱ. A dead square with exactly three live neighbors becomes a live cell (birth).Ⅲ. In all other c

C语言练习题一道——生命游戏

生命游戏是一个很简单,但却是很有趣的程序习题.在一个四周都可以延伸到无限的 棋盘上的某个格子中会有一个有机体.每一个有机体在时间t 时,会依照环绕着它的8 个邻 居的特性而决定在时间t+1 时是否能生存下去.如果某一格在时间t 时: (1)有一个有机体,但是它的邻居少于或等于1 个,或者是大于3 个,那就会因为不 够稠密或太过稠密,这个有机体在时间t+1 时就会死亡:换言之,在t+1 时间,那一格中不 会存在有机体.下面就是几个在时间t+1 时会死亡的例子,如图1 所示. 图1 (2)有有机体在