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

Python出现'int'类型不可迭代报错,邻接表递归代码如何修复

报错原因
  • 递归调用的第一个参数传递错误:首次调用传入的是完整邻接表字典,递归时错误传入了AList[i],这是当前节点的邻接节点列表,不是原邻接表字典。下一层函数执行end2 in AList[end1]时,AList已经是列表类型,AList[end1]取到的是列表对应下标的整数值,in语法要求右侧是可迭代对象,因此抛出整数不可迭代的错误。
  • 无向图遍历未加访问限制:邻接表存储的是无向图,没有访问标记会导致相邻节点循环递归,最终栈溢出。
  • 全局变量计数逻辑缺陷:多次调用函数会累计历史计数结果,不符合单次调用的预期。
修复代码

保留原有递归计数逻辑的修复版本如下:

def BackAndForth(AList, end1, end2, visited=None):
    # 初始化访问标记集合,避免循环递归
    if visited is None:
        visited = set()
    count = 0
    visited.add(end1)
    # 判断目标节点是否在当前节点的邻接列表中
    if end2 in AList[end1]:
        count += 1
    # 遍历所有邻接节点递归查询
    for i in AList[end1]:
        if i != end2 and i not in visited:
            # 第一个参数固定传完整邻接表字典,新增访问标记传递
            count += BackAndForth(AList, i, end2, visited.copy())
    return count

Alist = {
    0: [2, 3, 6],
    1: [3, 5, 6],
    2: [0, 3, 4],
    3: [0, 1, 2, 4],
    4: [2, 3, 5],
    5: [1, 4, 6],
    6: [0, 1, 5],
}
end1 = 0
end2 = 0
print(BackAndForth(Alist, end1, end2))

如果你仅需要判断指定元素是否存在于某节点的邻接列表中,不需要递归遍历所有路径,可直接使用极简写法:

def check_exist(AList, node, target):
    return target in AList.get(node, [])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:54:03