目录
一、题目翻译
二、数据结构设计与初始化
使用 pair<int, int> 类型 PII 来表示木块的位置信息,其中第一个元素为槽编号,第二个元素为木块在槽中的索引。采用 vector p[N] 来存储每个槽中的木块,整型变量 n 用于记录实际的木块数量。
初始化时,从输入获取木块数量 n,然后通过循环将每个木块放入对应的槽中,即 p[i].push_back(i)。
三、操作实现
move | 把a上方木块归位 |
pile | 把a及以上的木块放b上 |
onto | 把b上方归位,把a及以上的木块放在b上 |
over | 把a及以上的木块放b上 |
总体来看,四种操作主要分成木块的归位和移动。
1.查找木块位置
设计 find 函数,通过两层循环遍历所有槽和槽中的木块,找到目标木块时返回其位置信息。若未找到,则返回 {-1, -1}。
2.归位操作
设计 homing 函数,将目标木块上方的所有木块放回其初始位置。从目标木块的下一个位置开始遍历槽中的木块,依次放回其对应的初始槽中,并调整槽的大小。
3.移动操作
设计 move 函数,将目标木块及其上方的所有木块整体移动到另一个槽的顶部。从目标木块开始遍历槽中的木块,依次添加到目标槽的末尾,并调整原槽的大小。
4.指令处理
根据输入的指令类型进行处理。若为结束指令 “quit”,则停止处理。对于其他指令,读取操作类型、操作木块 a、中间指令和目标木块 b。先通过 find 函数获取 a 和 b 的位置信息,值得注意的,若它们在同一堆,则跳过该指令。然后根据指令类型调用相应的 homing 和 move 函数进行操作。