#python #data-structures
#python #структуры данных
Вопрос:
Как мне вычислить ребро? Например (посмотрите изображение): я начал в городе Боджонсоанг, и пункт назначения, в который я направляюсь, — это Dago, тогда результат вычисления ребра должен быть 220.
class Graph:
def __init__(self):
self.graph = {}
self.vertices_no = 0
def insertVertex(self,vertex):
if vertex in self.graph:
print("Vertex in Graph")
else:
self.graph[vertex] = []
self.vertices_no =1
def insertEdge(self,vertex1,vertex2, distance):
if vertex1 not in self.graph:
print("vertex not in Graph")
elif vertex2 not in self.graph:
print("vertex not in Graph")
else:
temp = [vertex2, distance]
self.graph[vertex1].append(temp)
def printGraph(self):
for vertex in self.graph:
for edge in self.graph[vertex]:
print(vertex, "-> ", edge[0], " Distance: ", edge[1])
Комментарии:
1. Вы хотите вычислить расстояние между вершинами, учитывая список вершин между ними, или вы хотите вычислить кратчайший путь между двумя вершинами?
2. я хочу рассчитать расстояние между двумя вершинами
3. Вопрос в том, указываете ли вы весь путь или только начальную и конечную точки? Ваш пример предлагает целый путь, поскольку существует более короткий маршрут от Аркаманика до Даго через Чумбулейт, но вы, похоже, хотите более длинный маршрут через Боджонсоанг.
4. я имею в виду опечатку от «Arcamanik» до «Dago»
Ответ №1:
Если вы хотите вычислить кратчайшее расстояние между двумя вершинами, взгляните на алгоритм Дейкстры: https://en.wikipedia.org/wiki/Dijkstra’s_algorithm .
Если вы просто хотите вычислить расстояние между двумя вершинами, учитывая список вершин, попробуйте что-то вроде этого (еще не протестировано и не так чисто, как могло бы быть …):
def calculateDistance(self, vertices):
distance = 0
if len(vertices) == 0 or len(vertices) == 1:
return distance
for i in range(0, len(vertices) - 1):
changed = False
for v in self.graph[vertices[i]]:
if v[0] == vertices[i 1]:
distance = v[1]
changed = True
break
if not changed:
raise ArgumentError("vertex doesn't exist in graph")
return distance
temp
Я думаю, что попытка изменения в insertEdge
словаре упростит задачу.