201604-2 俄罗斯方块

读完题目最初的想法是使用for循环模拟方块下落,

在此之前,要对方块数据进行处理:最下方全0行清除掉

在下落到当前行时判断是否有方块(即当前格子的数据为1),然后预判方块会不会发生碰撞,以及何时碰撞(再下落几格会碰撞)。或者不会发生碰撞,直接下落到底。

实现起来比较复杂,能通过大部分样例(90分)

但是有一部分样例是无法通过的,他们的共性就是在同一行中,从左至右,如果左边首先预判会在下落两个后发生碰撞,就会结束判断,然后宣布找到碰撞值并开始合并。哪怕右边在此时已经发生了碰撞,也会被忽略掉。
具体的出问题例程:

0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 1 1 0 0 0 0 0 0 0
0 0 1 1 0 0 0 0 0 0
0 0 1 1 0 0 0 0 0 0
0 0 1 1 0 0 0 0 0 0
0 0 1 1 0 0 0 0 0 0
0 0 1 1 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1
0 0 1 1
0 0 0 1
0 0 0 1
0 0 0 0
1

正确输出应该是:

0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 1 1 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0
0 1 1 1 0 0 0 0 0 0
0 0 1 1 0 0 0 0 0 0
0 0 1 1 0 0 0 0 0 0
0 0 1 1 0 0 0 0 0 0
0 0 1 1 0 0 0 0 0 0
0 0 1 1 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1

在研究了满分算法后,得到启发:

标准方块固定为4个,可以先将4个方块的坐标值存储起来,然后模拟下落,每一行只判断四个方块是否会发生碰撞,依然是只要出现一个发生碰撞,就宣布找到落点,并且合并数据(区别是不进行预判是否将要碰撞)。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容