问题描述:Conway 的“生命游戏”是一款模拟生物体在矩形网格中生存和死亡的游戏。从理论上来说,网格应该是无边界的,但计算机模拟时可用内存是有限的,因此我们将限定网格“范围”的大小。每个网格元胞要么住着一个活着的生物体,要么空着。住有生物体的元胞是活的,而空元胞是死的。这款模拟游戏通过连续的时间段或连续的几代来描述生物体的生死过程。
元胞的状态可以根据以下规则一代一代地变化:
一个元胞有八个邻居,分别从水平、垂直和对角方向包围此元胞。
如果一个元胞是活的,但它没有活着的邻居或只有一个活着的邻居,那么到了下一代该元胞将会饿死。
如果一个元胞是活的,且有四个或更多活着的邻居,那么到了下一代该元胞将因过度拥挤而死亡。
如果一个元胞是活的,且有二个或三个活着的邻居,那么到了下一代该元胞将继续活下去。
如果一个元胞是死的,且正好有三个活着的邻居,那么到了下一代该元胞将复活。所有其他死元胞到了下一代仍将保持死亡状态。
所有出生和死亡都在同一时刻发生,因此快要死去的元胞可能会促使其相邻元胞出生,但无法通过缓解拥挤程度来阻止其他元胞的死亡,即将出生的元胞也不能杀死或保护上一代活着的元胞。
标准模拟算法是检查网格中每一代的所有元胞,计算每个元胞的邻居数量并据此确定该元胞是活还是死,或者根据当代的计算结果来推断它在下一代是否会出生。另一种算法是保存一些元胞列表,其中包含在下一代可能需要注意的元胞。它只重点计算那些可能会导致元胞状态发生改变的元胞。这种备用算法可通过随附的代码实现。这种算法将进行线程化。代码档案文件中还包括一个带有更详细代码描述的文本文件。
代码限制:必须使用主程序中的算法和用于遍历那些列表的四个例程。数据结构(元胞、网格和列表)的实现可根据需要进行修改。
关于输入文件的描述:在应用程序开始执行后,将输入文件的名称以命令行参数的形式赋予应用程序。该文件内将有许多包含成对整数的行,这些成对的整数代表这款模拟游戏开始时活着的元胞所在的行和列。标记 (0 0) 代表活元胞的坐标终端。标记行后跟着下面两行:第一行包含一个整数,它代表要模拟的代的数量;第二行包含两个行-列对(四个整数),它们代表在模拟完成后将打印到标准输出设备的网格区域。(代码档案文件随附一个示范输入数据文件 virus.dat。)
评分标准:“执行情况和所用时间得分”将根据执行速度和输出准确度给出。
详情请点击:
大赛官方网站http://g.csdn.net/5035839