Я делаю проблему, которую некоторые из вас видели раньше.Почему мой код не находит путь с наибольшей суммой?
Я пытаюсь найти путь с наибольшей суммой в дерево, которое выглядит примерно так:
03
04 05
02 03 06
и так далее. Я скопировал дерево в текстовый файл «набор данных», так это выглядело так:
03
04 05
02 03 06
, а затем анализируется его в 2d массив, но мои два вложенных для петель находит правильный ответ в примере, но не Главная проблема. Ответ проверяется компьютером, поэтому я не знаю, каким он должен быть.
tree = [[]]
highest = 0
f = open("dataset","r") #contains the data from the problem
for line in f: #parser
for i in range(0,len(line),3):
tree[-1].append(int(line[i:i+2]))
tree.append([])
tree.pop()
for i in range(len(tree)):
highest += tree[i][0]
total = highest
for j in range(1,len(tree)):
for i in range(len(tree)-1,j-1,-1):
print(i,j)
total -= tree[i][j-1]
total += tree[i][j]
if(total>highest):
highest = total
print(highest)
Парсер распечатывает полный набор данных. Поскольку это проблема алгоритмов, они не дают сложных проблем синтаксического анализа.
Цикл double for
использует общее количество всех левых, а затем вычитает последний номер из этой строки и добавляет новый. Он анализирует дерево справа налево.
Я думал, что это может быть ошибка границ, но я не вижу ее нигде.
Любая идея, где я ошибаюсь?
Не могли бы вы предоставить входы, ожидаемые выходы и фактические выходы? – jonrsharpe
Я не знаю ожидаемого результата в наборе данных, который я использую, потому что проблема проверяется компьютером. Выход для входа I, который я обнаружил, будет 3 + 5 + 6 = 14. Программа получает 14 для этого набора данных. Тем не менее, он не получает правильного ответа для больших наборов данных. – JFA
Вы не используете 'treeparser' ... Также вы не ограничиваете себя допустимыми путями. Боюсь, что все решение просто неправильно. – Veedrac