解题思路
本题要求模拟一个数字消除游戏的全过程。面板为 H 行 5 列,每个格子中有一个 1 到 9 之间的整数。当某一行的水平方向上出现至少三个连续相同数字时,这些数字会被同时消除。消除后上方的数字会掉落填补空位,并重复检测消除,直到无法再消除为止。需要输出所有被消除数字的总和。
模拟过程分为若干轮,每轮包含三个步骤:
- 标记阶段(找出所有待消除数字)
- 为了避免“先消除影响后消除”的干扰,我们使用一个与面板大小相同的布尔数组
to_eliminate[H][5],初始均为 false。
- 遍历面板的每一行
r 和每一列 c(c≤2),若 grid[r][c] 非零且与 grid[r][c+1]、grid[r][c+2] 相等,则说明该行为一段可消除序列的起点。此时继续向右扫描,将该行中所有与 grid[r][c] 相等的连续数字在 to_eliminate 中标记为 true。