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

Python实现Dijkstra算法报TypeError: 'bool' object is not subscriptable求助

错误根因

报错触发的核心原因是dijkstra方法中对访问标记列表的初始化逻辑错误:你直接将原本是列表类型的self.vistSet整体赋值为布尔值False,后续在minDist方法中尝试用下标vistSet[v]访问元素时,就会触发「布尔类型不支持下标访问」的类型错误。

错误代码位于dijkstra方法的初始化循环中:

for i in range(self.V):
    self.distArray[i] = self.INF
    self.vistSet = False  # 此处错误:将整个列表替换为布尔值
修复步骤
  • 修正访问标记列表的初始化逻辑:将整体赋值修改为对列表对应下标的元素赋值
def dijkstra(self, srcsize):
    for i in range(self.V):
        self.distArray[i] = self.INF
        self.vistSet[i] = False  # 仅修改对应下标的标记值,不替换整个列表
    self.distArray[srcsize] = 0
    # 剩余原有逻辑保持不变
  • 补充minDist方法的变量初始化,避免极端场景下min_index未定义的报错:
def minDist(self, distArray, vistSet):
    min = self.INF
    min_index = 0  # 新增初始值定义
    for v in range(self.V):
        if distArray[v] < min and vistSet[v] == False:
            min = distArray[v]
            min_index = v
    return min_index
  • 补全邻接矩阵赋值逻辑:你当前的storeDist方法仅计算了相邻节点距离,但没有写入self.matrix邻接矩阵,会导致Dijkstra算法无法正常运行,在计算得到distance后添加如下代码:
# 无向图双向赋值,有向图可删除第二行
self.matrix[indexPointA][indexPointB] = distance
self.matrix[indexPointB][indexPointA] = distance
  • 完善距离计算逻辑:当前computeDist固定返回0,可根据需求替换为实际的坐标距离计算逻辑,比如欧氏距离实现:
def computeDist (self, a, b):
    a_node = next(item for item in self.locationList if item[0] == a)
    b_node = next(item for item in self.locationList if item[0] == b)
    x1, y1 = float(a_node[1]), float(a_node[2])
    x2, y2 = float(b_node[1]), float(b_node[2])
    return ((x1-x2)**2 + (y1-y2)**2)**0.5

内容的提问来源于stack exchange,提问作者Lilly Mayo-099

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:36:03