Я не могу понять, в чем я допустил ошибку, помогите пожалуйста
Не могу понять в чем ошибка и как её исправить:
- Решение слишком жадное и просто не может высчитать
- Ошибка где-то в коде или в алгоритме
Задание
Город 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