Найти максимальный путь и путь равный ср. арифметическому максимального и минимального пути?, c помощью дейкстры

    def __init__(self, id, name):
        self.id = id
        self.name = name
        self.minDistance = float('inf')
        self.previousVertex = None
        self.edges = []

    def __str__(self):
        return "{"+str(self.id)+"}"


class Edge:
    def __init__(self, source, target, weight):
        self.source = source
        self.target = target
        self.weight = weight

# Находим кратчайшее расстояние с помощью Дейкстры


class Dijkstra:
    def __init__(self):
        self.vertexes = []
        self.start = None
        pass

    def createGraph(self, vertexes, edgesToVertexes):
        self.vertexes = vertexes
        for edge in edgesToVertexes:
            for vertex in vertexes:
                if vertex.id == edge.source:
                    vertex.edges.append(edge)

    def computePath(self, sourceId):
        self.start = sourceId
        visit = []
        visited = []
        for item in self.vertexes:
            if item.id == sourceId:
                item.minDistance = 0
                item.previousVertex = sourceId
            visit.append(item.id)

        while len(visited) != len(visit):
            start = self.getMin(visited)

            for edge in start.edges:
                end = self.getVertex(edge.target)
                way = start.minDistance + edge.weight
                if end.minDistance >= way:
                    end.previousVertex = start.id
                    end.minDistance = way
            visited.append(start.id)

    def getShortestPathTo(self, targetId):
        way = []
        tmp = self.getVertex(targetId)
        way.insert(0, tmp)
        while tmp.previousVertex != tmp.id:
            tmp = self.getVertex(tmp.previousVertex)
            if tmp is None:
                break
            way.insert(0, tmp)
        return way

    def getMin(self, array):
        min = Vertex('a', 'tmp')
        min.minDistance = float('inf')
        for item in self.vertexes:
            if (item.minDistance <= min.minDistance) and (item.id not in array):
                min = item
        return min

    def getVertex(self, id):
        vertex = None
        for item in self.vertexes:
            if item.id == id:
                vertex = item
                break
        return vertex

    def getVertexes(self):
        return self.vertexes


with open('input_graph1.txt') as f:
    matrix = [list(map(int, row.split())) for row in f.readlines()]

n = len(matrix)

try:
    a = int(input("Откуда ? : "))
    b = int(input("Куда ? : "))

    if (a > 0) and (b > 0) and (a <= 15) and (b <= 15):
        a = a - 1
        b = b - 1

        vertexes = []
        edges = []
        for i in range(len(matrix)):
            v = Vertex(i, str(i + 1))
            for k in range(len(matrix[i])):
                if matrix[i][k] == 0:
                    continue
                e = Edge(i, k, matrix[i][k])
                edges.append(e)
            vertexes.append(v)

        dijkstra = Dijkstra()
        dijkstra.createGraph(vertexes, edges)

        vertexToCompute = vertexes[a]
        dijkstra.computePath(a)
        path = dijkstra.getShortestPathTo(b)
        for vertex in path:
            print("Путь -> " + str(vertex.name))
        print("Минимальное расстояние: " + str(vertexes[b].minDistance))
    else:
        print("Введенное число(а) не в интервале 1..15")
except ValueError:
    print("Введенное значения не число")```

Ответы (0 шт):