我正在开发一个简单的代码,该代码将通过使用字典和循环为我提供图形中的最短路径。
但是,我在此过程中有些困惑,无法获取正确的答案。
我试图使代码尽可能简单:我有两个字典-一个用于访问,另一个用于未访问的节点。
class Graph:
def __init__(self):
self.graph = {
'A': {'B': 10, 'D': 4, 'F': 10},
'B': {'E': 5, 'J': 10, 'I': 17},
'C': {'A': 4, 'D': 10, 'E': 16},
'D': {'F': 12, 'G': 21},
'E': {'G': 4},
'F': {'H': 3},
'G': {'J': 3},
'H': {'G': 3, 'J':5},
'I': {},
'J': {'I': 8}
}
def shortpath(self, start, end):
D = {}
P = {}
for knote in self.graph.keys():
D[knote] = - 1
P[knote] = ""
D[start] = 0
unvisited_n = list(self.graph.keys())
while len(unvisited_n) > 0:
shortest = None
knote = ''
for temp_node in unvisited_n:
if shortest == None:
shortest = D[temp_node]
node = temp_node
elif D[temp_node] < shortest:
shortest = D[temp_node]
knote = temp_node
if knote in unvisited_n:
unvisited_n.remove(knote)
for c_knote, v_value in self.graph[knote].items():
if D[c_knote] < D[knote] + v_value:
D[c_knote] = D[knote] + v_value
P[c_knote] = knote
path = []
knote = end
while not (knote == start):
if path.count(knote) == 0:
path.insert(0, knote)
knote = P[knote]
else:
break
path.insert(0, start)
return path
def main():
gg = Graph()
path = gg.shortpath('C', 'I')
print(path)
if __name__ == '__main__':
main()
我希望输出是C(起点)和I(终点)之间的最短路径。 我也无法初始化算法。也就是说,每当我在下一个单元格中输入:“ shortpath(graph,'C','I')”时,我会收到SyntaxError或“ Shorpath尚未定义” ...
我先感谢您的时间和耐心!