算法

您所在的位置:网站首页 游戏中的死了 算法

算法

2024-07-16 19:29| 来源: 网络整理| 查看: 265

算法 | 生命游戏 1 背景说明 2 算法原理 2.1 概述 2.2 规则 3 程序实现 4 结果分析 4.1 情形一 4.2 情形二 4.3 情形三 4.4 情形四 5 后记 概要: 本文将要介绍一个名为“生命游戏”的有趣算法并用C++进行简单的实现。 关键字: C++;生命游戏算法  

1 背景说明

   生命游戏,又叫康威生命游戏(Conway’s Game of Life),或康威生命棋,是英国数学家约翰·康威(John Conway)在1970年发明的细胞自动机。它最初在1970年10月在《科学美国人》杂志上的“数学游戏”专栏出现。我大一暑假在上暑期课程时无意中接触到这个概念,并被它看似简单的外表、实则复杂的“内心”所吸引,于是出于好奇就自己用C++模拟了一翻,直到最近整理本科成果时又一次翻到了这个小巧有趣的代码。代码很短,只有一二百行,其中核心的判断和计算的部分只有十来行;其算法更是简单,几句话就可以描述清楚。下面我将做简要的介绍。

2 算法原理 2.1 概述

   生命游戏是一个零玩家游戏。它发生在一个二维矩形世界,这个世界的基本组成单位是一个一个等大的小方格。每个方格居住着一个活着的或死了的细胞。一个细胞在下一个时刻生死取决于相邻八个方格中活着的细胞的数量。一方面,如果相邻方格活着的细胞数量过多,这个细胞会因为资源匮乏而在下一个时刻死去;另一方面,如果周围活细胞过少,这个细胞会因太孤单而死去。而只有其周围的细胞数量适合时,这个方格中的细胞才能继续存活。若方格中原来的细胞已经死亡,在其周围细胞数量合适时,也会使得该死细胞“死而复生”,这可以认为是在模拟细胞的繁殖。玩家可以设定周围活细胞的数目怎样时才事宜细胞生存和繁殖。但是需要注意的是,如果这个数目设定过高,世界中的大部分细胞会因为找不到太多的活的邻居而死去,直到整个世界都没有生命;如果这个数目设定过低,世界中又会被生命充满而没有什么变化。

   实际游戏中,这个数目一般选取2或者3;这样整个生命世界才不至于太过荒凉或拥挤,而是出于一种动态平衡之中。如此一来,游戏的规则就是:当一个方格周围有2或3个活细胞时,方格中的活细胞在下一个时刻继续存活;即使这个时刻方格中没有活细胞,在下一个时刻也会“诞生”活细胞。否则,这个方格中的细胞会死亡,或不诞生新的活细胞。

2.2 规则

   在选取了合适的数据后,对具体规则作如下描述。

   生命游戏中,对于任意细胞:    每个细胞有两种状态:存活或死亡。每个细胞与以自身为中心的周围八格细胞产生互动。    1.当前细胞为存活状态时,当周围的活细胞低于2个时, 该细胞因孤独而死亡;    2.当前细胞为存活状态时,当周围有2个或3个活细胞时, 该细胞保持原样;    3.当前细胞为存活状态时,当周围有3个以上活细胞时,该细胞因资源匮乏而死亡;    4.当前细胞为死亡状态时,当周围有3个活细胞时,该细胞变成存活状态(模拟繁殖)。

3 程序实现

   我用C++模拟了上述过程。此算法的核心在于计算下一代细胞的存亡图景,代码如下所示:

void NextG(int p[][MAXLIS],int q[][MAXLIS]) { int i,j,x,y; int judge; for(i = 0;i < MAXROW;i++) { for(j = 0;j < MAXLIS;j++) { if(p[i][j] == ALIVE) { judge = -1; //每一轮结束judge都要复位 } else if(p[i][j] == DEAD) { judge = 0; } for(x = MAX(i-1,0);x


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3