Game of Life
题意
给定一个n*m的矩阵,矩阵中的值为0或者1,0代表这个格子是死的,1代表这个格子是活的。然后给定一系列的规则,比如一个活格子的周围(八个方向)如果存在少于2个活格子,那么该活格子死亡等等,一共有四个规则。而且对于每个格子,判断周围的格子状态时要看其原始状态,不能是更新以后的。不能用额外空间,要在原矩阵中改动格子的状态。
解法
这个题目的难点在于不能用额外的空间,如果可以用额外的空间的话,那这道题目就不难了。我们怎么在记录原格子状态的情况下改变该格子的状态。
我们用两位二进制数来表示该格子的状态,00,01,10,11。分别表示为:
00:该格子原来是死的,更新后还是死的。
10:该格子原来是死的,更新后为活的。
01:该格子原来是活的,更新后为死的。
11:该格子原来是活的,更新后还是活的。
我们观察下,为什么这么表示。两位二进制的第一位,也就是低位,表示的是原状态;第二位,也就是高位,表示的是更新后的状态。所以10代表的就是原来是死的,更新后为活的。
那么这样的话,我们在判断某个格子的周围格子状态时,只看低位为0或者1即可。当更新完以后,我们将所有状态往右移动一位,只取高位,则得到了更新后棋盘的状态。
代码
|
|