第 14 题
答案与解析
第(1)小题
SN
普通方向指令按顺序入栈,B 撤销最后一条仍有效的指令,即使栈顶元素出栈。按日志 EBSSBNEB 依次处理:
| 读入指令 | 操作 | 有效路径(栈底→栈顶) |
|---|---|---|
| 初始 | — | 空 |
| E | E 入栈 | E |
| B | 撤销 E | 空 |
| S | S 入栈 | S |
| S | S 入栈 | S,S |
| B | 撤销最后一个 S | S |
| N | N 入栈 | S,N |
| E | E 入栈 | S,N,E |
| B | 撤销 E | S,N |
返航时先逆转最后的 N,执行 S;再逆转此前的 S,执行 N,得到 SN。虽然这两步的净位移为零,题目要求按有效路径原路返航,仍需保留两条指令。
第(2)小题
stack.pop()
len(stack)>0
opp[curr]
程序分析
path_log = "NEEBSNBBWE"
stack = []
for cmd in path_log:
if cmd == "B":
if len(stack) > 0:
①
else:
stack.append(cmd)for 循环逐个字符处理 path_log。普通方向指令通过 stack.append(cmd) 加到列表末尾,后读入的指令位于末尾。题目规定 B 撤销最近一次有效移动,符合栈“后进先出”的特点,因此用列表 stack 模拟栈,列表末尾为栈顶。遇到 B 时,先用 len(stack)>0 判断是否存在可撤销的指令,再执行空①。
opp = {'N': 'S', 'S': 'N', 'E': 'W', 'W': 'E'}
cmds = ""
while ②:
curr = stack.pop()
cmds += ③
print("安全返航的指令序列为:", cmds)字典 opp 保存方向与反方向的对应关系,如 N 对应 S、E 对应 W。cmds 初值为空字符串,用于拼接返航指令。while 循环每轮通过 stack.pop() 取出并删除栈顶指令,保存到 curr,取出的顺序与栈中指令原来的先后顺序相反;空③的结果再追加到 cmds。
填空分析
①
B 需要撤销最后一条有效移动,该指令位于栈顶,所以填 stack.pop(),删除列表末尾元素。外层的非空判断已保证有元素可删;B 本身不入栈。
②
返航时应逐条处理全部有效指令,栈非空就继续取出栈顶,栈空时结束,故填 len(stack)>0,也可填 stack!=[] 或 stack。若空栈时仍进入循环,下一行 stack.pop() 会报错。
③
curr 已保存本轮取出的原飞行指令,应根据字典 opp 查出它的反方向并追加到 cmds,所以填 opp[curr]。出栈完成顺序反转,字典查找完成方向反转,二者共同生成原路返航指令。
问题反馈
解析有疑问或显示异常?请先复制题目信息,再打开反馈表单填写。
题目编号:2026_05_G3_zhenzhongmoni_q014
