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

Python BFS算法异常:队列弹出整数引发TypeError错误

问题原因与解决办法

核心问题

你遇到的TypeError本质是队列里混入了非坐标元组的整数元素,第二次弹出的是单个整数1,自然无法用下标(比如current[0])访问。只有起点终点同为(0,0)时正常,是因为这种情况不需要遍历任何邻居,队列只进了起点就直接处理完了,不会触发错误。

大概率出错的地方

90%以上是你在生成邻居坐标、往队列里加元素的时候,误把单个坐标值(比如x或y)当成元组塞进去了。比如本来应该把(nx, ny)入队,结果写成了queue.append(nx)或者queue.append(ny)。

解决步骤

  1. 全面检查所有入队操作:找到代码里所有queue.append(...)的地方,确保每一次传入的都是长度为2的元组(比如(x, y)),而不是单个整数。
  2. 排查邻居生成逻辑:比如你计算新坐标nx = x + dx[i]、ny = y + dy[i]之后,是不是正确把这两个值打包成元组再入队?举个正确写法的例子:
    dx = [0, 0, 1, -1]
    dy = [1, -1, 0, 0]
    current = queue.popleft()
    x, y = current
    for i in range(4):
        nx = x + dx[i]
        ny = y + dy[i]
        # 检查nx、ny是否在网格范围内,以及是否未访问过
        if 0 <= nx < rows and 0 <= ny < cols and not visited[nx][ny]:
            visited[nx][ny] = True
            queue.append((nx, ny))  # 这里必须是元组,不能单独写nx或ny
    
  3. 快速定位错误点(可选):可以在入队前加个简单的校验,比如:
    def enqueue(queue, pos):
        assert isinstance(pos, tuple) and len(pos) == 2, "入队元素必须是坐标元组"
        queue.append(pos)
    
    用这个函数替代直接append,一旦传入错误类型会立刻抛出断言错误,帮你精准找到哪一行写错了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 00:30:52