You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何我的OBI蚂蚁滑行题Python代码陷入无限输入等待?

问题排查:OBI竞赛蚂蚁滑行代码运行异常

题目背景

我正在参加巴西OBI信息学竞赛,完成一道蚂蚁滑行题目,题目详情如下:
蚁后平日为蚁群收集树叶,周末会在蚁穴隧道滑行。蚁穴有多个大厅和隧道,每条隧道连接两个不同大厅,每个大厅有高度。若隧道连接的大厅I高度高于J,蚁后可从I滑向J。给定隧道地图、大厅高度和起始大厅,编程求蚁后最多能访问的大厅数量(不计起始大厅)。

输入格式

  • 第一行3个整数S、T、P,分别为大厅数、隧道数、起始大厅编号(1~S);
  • 第二行S个整数A,对应各大厅高度;
  • 接下来T行每行两个整数I、J,表示隧道连接大厅I和J。

输出格式

输出一个整数,即蚁后最多能访问的大厅数量。

原运行代码

S, T, P = map(int, input().split())

A = {tunel + 1: altura for tunel, altura in enumerate(map(int, input().split()))}

conex = [set(map(int, input().split())) for tunel in range(T)]

A = {altura: tunel for tunel, altura in A.items() if altura <= A[P]}
A = {tunel: altura for altura, tunel in A.items()}
A = sorted(A.items(), reverse=True, key=lambda kv: (kv[1], kv[0]))

res = 0
while 1:
    try:
        sala_1 = A[0]
        sala_2 = A[1]

        if {sala_1[0], sala_2[0]} in conex:
            res += 1
        else:
            del sala_2
            continue
    except IndexError:
        break

    del sala_1

print(res)

问题情况

原本代码运行正常,但将代码中else块修改为以下内容后,运行时输入完所有数据程序持续无响应(看似等待输入,实际为逻辑死循环):

else:
    del sala_2
    break

问题根源

  1. 变量删除逻辑错误:原代码中del sala_2仅删除了变量sala_2的引用,并未修改列表A的内容。当两个大厅无隧道连接时,continue会让循环重复读取相同的A[0]和A[1],直接触发无限循环。之前程序正常是因为测试用例未触发该场景。
  2. 核心逻辑偏离题目要求:代码按高度排序后检查相邻大厅的连接数,这和题目要求的“求最长滑行路径长度”完全不符,本质是逻辑错误。

修复方案

要正确解决题目,需使用记忆化DFS计算每个大厅能到达的最远距离,符合“从高到低滑行”的规则:

正确代码示例

S, T, P = map(int, input().split())
heights = list(map(int, input().split()))
# 转为1-based索引,匹配大厅编号
heights = [0] + heights
# 构建邻接表,仅保留可滑行的方向(高→低)
adj = [[] for _ in range(S+1)]
for _ in range(T):
    u, v = map(int, input().split())
    if heights[u] > heights[v]:
        adj[u].append(v)
    elif heights[v] > heights[u]:
        adj[v].append(u)

# 记忆化数组,存储每个大厅能到达的最大数量
memo = [0]*(S+1)

def dfs(node):
    if memo[node] != 0:
        return memo[node]
    max_count = 0
    for neighbor in adj[node]:
        max_count = max(max_count, 1 + dfs(neighbor))
    memo[node] = max_count
    return max_count

print(dfs(P))

代码说明

  • 邻接表构建:仅保留从高大厅到低大厅的路径,严格符合题目滑行规则;
  • 记忆化DFS:避免重复计算相同大厅的路径长度,高效求解起始大厅能到达的最大大厅数量。

内容的提问来源于stack exchange,提问作者luqhe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 21:39:20