Дано: классы Point(вершины), Link(рёбра), Graph с логикой и алгоритмом. Вопрос не совсем про алгоритм в отдельности, а про реализацию логики где вершины и рёбра это отдельные классы.
В чем вопрос? Link(ребро) хранит две вершины и вес этого ребра, а Point(вершина) хранит Link'и в которых как минимум будет эта же вершина + соседняя, и вес. Вот эта вложенность мне не нравится, но как должно быть я не знаю.
В учебниках и интернетах это реализуется словарём типа {Вершина1: [{Вершина 2:вес}, {Вершина 3:вес}] }, здесь же это нужно реализовать классами и мне не понятная эта вложенность. мне кажется лишнеи усложнением, а как должно быть не знаю, прошу более опытных подсказать как лучше? Есть ли паттерн для подобных случаев?
class Point:
def __init__(self):
self._links = []
@property
def links(self):
return self._links
class Link:
def __init__(self, v1: Point, v2: Point):
self._v1 = v1
self._v2 = v2
self._dist = 1
@property
def v1(self):
return self._v1
@property
def v2(self):
return self._v2
@property
def dist(self):
return self._dist
class Graph:
def __init__(self):
self._links = []
self._point = []
def add_point(self, v):
if v not in self._point
self._point.append(v)
def add_link(self, link):
if not all(_ == link for _ in self._links):
self._links.append(link)
def find_path(self, start_v, stop_v):
pass # здесь должен быть алгоритм Дейкстры