Я не могу понять, в чем я допустил ошибку, помогите пожалуйста

Не могу понять в чем ошибка и как её исправить:

  1. Решение слишком жадное и просто не может высчитать
  2. Ошибка где-то в коде или в алгоритме

Задание

Город Z Город состоит из 25 районов, соединенных улицами с односторонним или двусторонним движением. На карте районы представлены кружками, содержащими название района (буквы A − Y) и коэффициент k, который различен для каждого района , пропорциональный количеству жителей данного района. Улицы представлены линиями, для каждой улицы рядом с линией указано время t проезда по ней. Полицейский патруль, путешествуя по городу, по крайней мере один раз проезжает по каждой улице и по крайней мере k раз посещает каждый район. Задача состоит в том, чтобы разработать маршрут патрулирования, проходящий через город за минимальное время. Карта города представляет собой смешанный граф, в котором вершинам и ребрам присвоены веса. Требуется найти цикл с наименьшим суммарным весом ребер, содержащий все ребра графа и проходящий через каждую вершину k раз, для каждой вершины.

def add_street(self, start, end, time):
    self.graph[start][end] = time
    self.graph[end][start] = time

def find_starting_point(self, districts):
    max_coefficient = 0
    starting_point = ''
    for district, coefficient in districts.items():
        if coefficient > max_coefficient:
            max_coefficient = coefficient
            starting_point = district
    return starting_point

def find_shortest_path(self, start):
    path = [start]
    while len(path) < len(self.graph):
        next_district, next_time = min(self.graph[start].items(), key=lambda x: x[1])
        if next_district not in self.visited:
            path.append(next_district)
            self.visited.add(next_district)
            start = next_district
        else:
            for district, time in sorted(self.graph[start].items(), key=lambda x: x[1]):
                if district not in self.visited:
                    path.append(district)
                    self.visited.add(district)
                    start = district
                    break
    path.append(path[0])  # возвращаемся в начальную точку
    return path

def patrol_route(self, districts):
    starting_point = self.find_starting_point(districts)
    self.visited.add(starting_point)
    path = self.find_shortest_path(starting_point)
    return path

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