【发布时间】:2022-11-21 10:43:32
【问题描述】:
我的目标是能够使用 Dijkstra 算法读取所有其他建筑物之间特定建筑物之间的最短距离。我相信如果我能改正错误,我就能完成我的目标。下面的错误在 for 循环处停止,它试图通过顶点进行索引。我认为这可能与不包含整数数据类型的图形有关,但这无关紧要,因为它应该只比较图形中的数字。如果有人能指出我正确的方向,这样我就能明白我做错了什么,那就太好了。
追溯(最近一次通话): dijkstra 中的文件“main.py”,第 26 行 对于 self.graph[u] 中的 v: 键错误:0
import sys
class Graph():
def __init__(self, vertices):
self.V = vertices
self.graph = {}
def min_distance(self,distance,traversed):
min_index = 0
min_value = sys.maxsize
for i in range(self.V):
if traversed[i] is False and min_value > distance[i]:
min_value = distance[i]
min_index = i
return min_index
def dijkstra(self,source):
distance = [sys.maxsize] * self.V
traversed = [False] * self.V
distance[source] = 0
for i in range(self.V):
u = self.min_distance(distance,traversed)
traversed[u] = True
for v in self.graph[u]: #ERROR
if(traversed[v] is False):
distance[v] = min(distance[v],distance[u]+self.graph[u][v])
print("from the give source vertex -- > ",source)
for vertex in range(self.V):
print("Vertex ",vertex," --> Distance = ",distance[vertex])
g = Graph(19)
g.graph = {
'College Square':{'Lewis Science Center':200, 'Prince Center':300},
'Lewis Science Center':{'College Square':200, 'Speech Language Hearing':250, 'Computer Science':150},
'Speech Language Hearing':{'Lewis Science Center':250, 'Burdick':100, 'Maintenance College':120},
'Computer Science':{'Prince Center':80, 'Torreyson Library':40, 'Burdick':30, 'Lewis Science Center':150},
'Burdick':{'Computer Science':30, 'Speech Language Hearing':100, 'Torreyson Library':80, 'Maintenance College':300, 'McALister Hall':200},
'Prince Center':{'College Square':300, 'Computer Science':80, 'Torreyson Library':30, 'Police Dept.':100},
'Torreyson Library':{'Prince Center':30, 'Computer Science':40, 'Burdick':80, 'Old Main':30},
'Old Main':{'Torreyson Library':30, 'Police Dept.':200, 'Fine Art':90, 'McALister Hall':100},
'Maintenance College':{'Speech Language Hearing':120, 'Burdick':300, 'McALister Hall':150, 'Wingo':100, 'New Business Building':150, 'Oak Tree Apt.':160},
'Police Dept.':{'Prince Center':100, 'Old Main':200, 'Fine Art':50, 'Student Health Center':100},
'Fine Art':{'Police Dept.':50, 'Old Main':90, 'McALister Hall':180, 'Student Center':80},
'McALister Hall':{'Fine Art':180, 'Old Main':100, 'Burdick':200, 'Maintenance College':150, 'Wingo':50, 'Student Center':100},
'Student Center':{'Fine Art':80, 'McALister Hall':100, 'Wingo':100, 'New Business Building':110, 'Student Health Center':50},
'Wingo':{'Student Center':100, 'McALister Hall':50, 'Maintenance College':100, 'New Business Building':50},
'Student Health Center':{'Police Dept.':100, 'Student Center':50, 'Brewer-Hegeman':200},
'New Business Building':{'Student Center':110, 'Wingo':50, 'Maintenance College':150, 'Oak Tree Apt.':30, 'Brewer-Hegeman':20},
'Oak Tree Apt.':{'Maintenance College':160, 'New Business Building':30, 'Brewer-Hegeman':40},
'Brewer-Hegeman':{'Student Health Center':200, 'New Business Building':20, 'Oak Tree Apt.':40, 'Bear village Apt.':350},
'Bear village Apt.':{'Brewer-Hegeman':350}
}
g.dijkstra(0)
【问题讨论】:
-
我认为这里的问题是你混淆了表示。您正在使用整数来表示顶点,但图形是按名称索引的,因此您需要以某种方式将它们关联起来。