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

Python中如何将Dijkstra输出的一维数组新增行存入n×n矩阵

问题根因

你定义的dijkstra方法没有设置显式返回值,Python中所有未显式写return语句的函数/方法,执行完成后默认返回None,这就是你D_path变量是NoneType的原因。

修改方案

  1. 给dijkstra方法添加返回值:在方法末尾调用完self.printSolution(dist)之后,新增一行return dist,把计算得到的最短距离数组返回。
  2. 优化矩阵赋值逻辑:不需要额外定义row变量嵌套包裹D_path,直接把返回的dist数组追加到matrix中即可,避免结果多一层嵌套。

修正后完整代码

import sys
import numpy as np

 
class Graph():
 
    def __init__(self, vertices):
        self.V = vertices
        self.graph = [[0 for column in range(vertices)]
                      for row in range(vertices)]
 
    def printSolution(self, dist):
        print("Vertex tDistance from Source")
        for node in range(self.V):
            print(node, "t", dist[node])
 
    # 查找未加入最短路径树的节点中距离最小的节点
    def minDistance(self, dist, sptSet):
        min = sys.maxsize
        for v in range(self.V):
            if dist[v] < min and sptSet[v] == False:
                min = dist[v]
                min_index = v
        return min_index
 
    # Dijkstra单源最短路径实现
    def dijkstra(self, src):
        dist = [sys.maxsize] * self.V
        dist[src] = 0
        sptSet = [False] * self.V
 
        for cout in range(self.V):
            u = self.minDistance(dist, sptSet)
            sptSet[u] = True
            # 更新邻接节点距离
            for v in range(self.V):
                if self.graph[u][v] > 0 and sptSet[v] == False and dist[v] > dist[u] + self.graph[u][v]:
                    dist[v] = dist[u] + self.graph[u][v]
 
        self.printSolution(dist)
        return dist # 新增返回距离数组
 
 
# 测试代码
g = Graph(9)
g.graph = [[0, 4, 0, 0, 0, 0, 0, 8, 0],
           [4, 0, 8, 0, 0, 0, 0, 11, 0],
           [0, 8, 0, 7, 0, 4, 0, 0, 2],
           [0, 0, 7, 0, 9, 14, 0, 0, 0],
           [0, 0, 0, 9, 0, 10, 0, 0, 0],
           [0, 0, 4, 14, 10, 0, 2, 0, 0],
           [0, 0, 0, 0, 0, 2, 0, 1, 6],
           [8, 11, 0, 0, 0, 0, 1, 0, 7],
           [0, 0, 2, 0, 0, 0, 6, 7, 0]
           ]

matrix=[] 
for i in range(9):
    D_path = g.dijkstra(i)
    matrix.append(D_path) # 直接将距离数组作为行加入矩阵
print(matrix)

修改后matrix就是9×9的最短距离矩阵,每行对应以对应索引节点为源点的最短距离结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:36:01