因此,我正在为包裹运送业务编写模拟器,而对于dijkstra算法的实现却遇到了我似乎无法查明的障碍。
下面的代码的主要目标是建立一个最短距离的二维数组,以便在目的地可能发生变化的情况下在开车时快速查找。
在调用find_shortest路径后返回的distances数组将保留最大整数值,即使图形已完全连接。当我尝试从> 0的起始位置运行它时,会发生此问题。
#
# Used to define/process adjency matrices for the simulation
import sys
class DistanceTable:
def __init__(self, size, labels):
self.table = [[0 for column in range(size)]
for row in range(size)]
self.labels = labels
self.size = size
def get_minimum_distance(self, distances, visited):
prev_min = sys.maxsize
min_distance_idx = -1
for i in range(self.size):
if distances[i] <= prev_min and visited[i] is False:
prev_min = distances[i]
min_distance_idx = i
return min_distance_idx
def find_shortest(self, start_val):
visited = [False] * self.size
distances = [sys.maxsize] * self.size
distances[start_val] = 0
for i in range(self.size):
min_distance_idx = self.get_minimum_distance(distances, visited)
visited[min_distance_idx] = True
for y in range(self.size):
if visited[y] is False and self.table[i][y] > 0 and distances[y] > distances[i] + self.table[i][y]:
distances[y] = distances[i] + self.table[i][y]
return distances
labels = [''] * 3
size = len(labels)
distance = [[0, 2, 18],
[1, 0, 4],
[5, 13, 0]]
graph = DistanceTable(size, labels)
graph.table = distance
dist = [[0 for column in range(size)]
for row in range(size)]
for i in range(3):
dist[i] = graph.find_shortest(i)
print(dist[i])
这是我能做的最小的例子,上面打印的输出是:
[0, 2, 6]
[1, 0, 9223372036854775807]
[9223372036854775807, 9223372036854775807, 0]
或者为了更容易阅读
[0, 2, 6 ]
[1, 0, sys.maxint]
[sys.maxint, sys.maxint, 0 ]