一百道编程题|02 The blocks problem

目录

一、题目翻译

二、数据结构设计与初始化

三、操作实现

1.查找木块位置

2.归位操作

3.移动操作

4.指令处理


一、题目翻译

二、数据结构设计与初始化

       使用 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 函数进行操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值