主题:求教高手一个棘手的问题 __谢谢大家
1. 生命游戏
问题描述:Life游戏只是一个模拟游戏,在Life游戏中没有真正的玩家。Life游戏在一个没有边界的矩形网格中展开,其中的各个元胞(cell)都可以被一个有机体占有或者处于空闲状态。被占用的元胞处于alive(生的)状态,未被占用的元胞处于dead(死的)状态,元胞状态从一代向另一代转换,是否为alive状态主要取决于与其相邻的元胞alive状态的数量,其规则如下:
(1) 与给定元胞相邻的元胞是指与该元胞垂直相连、水平相连,或者是通过对角线相连的元胞。
(2) 如果某元胞状态为alive,但与其相邻的元胞没有一个处于alive状态,或者是与其相邻的元胞仅有一个处在alive状态,那么在下一代中该元胞就因孤立而转变成dead状态。
(3) 如果某元胞状态为alive,并且与其相邻的元胞状态为alive的元胞数量为4个或者更多,那么在下一代中该元胞由于过分拥塞而转变为dead状态。
(4) 如果某个状态为alive的元胞有2个或者3个相邻的状态为alive的元胞,那么在下一代中该元胞状态仍为alive。
(5) 如果某元胞状态为dead,并且与其相邻的元胞状态为alive的元胞数量恰好为3个,那么在下一代中该元胞将转变为alive。其他所有状态为dead的元胞状态保持不变。
(6) 所有的生(状态转变为alive)和死(状态转变为dead)发生在相同的时间。这样一个正在转变为dead状态的元胞将有助于另外一个元胞转变成alive状态,但是通过降低拥塞并不能阻止其他元胞转变为dead状态。同时,正在转变为alive状态的元胞不会保持或取消上一代中状态为alive的元胞。
编写程序演示初始元胞群体是如何一代一代变化下去的。
算法的输入:矩形数组map,其中包含alive元胞的初始布局。
算法的输出:矩形数组map中的内容。
算法要点:对矩形数组map中的每个元胞执行下面的步骤:
(1) 统计与元胞相邻的状态为alive的元胞的数目。
(2) 如果统计结果为0、1、4、5、6、7或8,则设置另一个矩形数组newmap中对应的元胞的状态设置为dead;如果统计结果为3,则将对应的元胞的状态设置为alive;如果统计结果为2,则将对应的元胞的状态设置为map数组中相应的元胞状态(因为状态为alive的相邻元胞的数目为2的元胞状态不改变)。
(3) 将newmap矩形数组中的内容复制到map矩形数组。
(4) 输出map矩形数组中的内容。
问题描述:Life游戏只是一个模拟游戏,在Life游戏中没有真正的玩家。Life游戏在一个没有边界的矩形网格中展开,其中的各个元胞(cell)都可以被一个有机体占有或者处于空闲状态。被占用的元胞处于alive(生的)状态,未被占用的元胞处于dead(死的)状态,元胞状态从一代向另一代转换,是否为alive状态主要取决于与其相邻的元胞alive状态的数量,其规则如下:
(1) 与给定元胞相邻的元胞是指与该元胞垂直相连、水平相连,或者是通过对角线相连的元胞。
(2) 如果某元胞状态为alive,但与其相邻的元胞没有一个处于alive状态,或者是与其相邻的元胞仅有一个处在alive状态,那么在下一代中该元胞就因孤立而转变成dead状态。
(3) 如果某元胞状态为alive,并且与其相邻的元胞状态为alive的元胞数量为4个或者更多,那么在下一代中该元胞由于过分拥塞而转变为dead状态。
(4) 如果某个状态为alive的元胞有2个或者3个相邻的状态为alive的元胞,那么在下一代中该元胞状态仍为alive。
(5) 如果某元胞状态为dead,并且与其相邻的元胞状态为alive的元胞数量恰好为3个,那么在下一代中该元胞将转变为alive。其他所有状态为dead的元胞状态保持不变。
(6) 所有的生(状态转变为alive)和死(状态转变为dead)发生在相同的时间。这样一个正在转变为dead状态的元胞将有助于另外一个元胞转变成alive状态,但是通过降低拥塞并不能阻止其他元胞转变为dead状态。同时,正在转变为alive状态的元胞不会保持或取消上一代中状态为alive的元胞。
编写程序演示初始元胞群体是如何一代一代变化下去的。
算法的输入:矩形数组map,其中包含alive元胞的初始布局。
算法的输出:矩形数组map中的内容。
算法要点:对矩形数组map中的每个元胞执行下面的步骤:
(1) 统计与元胞相邻的状态为alive的元胞的数目。
(2) 如果统计结果为0、1、4、5、6、7或8,则设置另一个矩形数组newmap中对应的元胞的状态设置为dead;如果统计结果为3,则将对应的元胞的状态设置为alive;如果统计结果为2,则将对应的元胞的状态设置为map数组中相应的元胞状态(因为状态为alive的相邻元胞的数目为2的元胞状态不改变)。
(3) 将newmap矩形数组中的内容复制到map矩形数组。
(4) 输出map矩形数组中的内容。