Лягушка хочет пересечь реку.Как найти самый длинный путь?
В реке, в которую она может прыгать, есть 3 камня.
Она хочет выбрать среди всех возможных путей тот, который ведет к наименьшему длинному прыжку.
Т.е. каждый из возможных путей будет иметь один прыжок, который является самым длинным. Ей нужно найти путь, где этот самый длинный прыжок самый маленький.
2 берега расположены в 10 друг от друга и параллельны оси y.
Каждое положение камня задается списком x = [x1, x2, x3] положений x и y = [y1, y2, y3] положений y.
Возвратите как самый длинный прыжок на этом пути (округленный до ближайшего целого), так и сам путь через список индексов в списках x и y камней на пути.
Вот мой код на Python, чтобы найти самый длинный прыжок.
Как бы я отслеживал сам путь?
И мой код выглядит неуклюжим с 3 вложенными циклами, есть ли лучший/более элегантный способ написать этот код?
def longestJump(x, y):
best = 10
for i in range(0,3):
for j in range(0,3):
for k in range(0,3):
# first jump from shore to a stone
dist = x[i]
# second jump between stones
dist = max(dist, round(math.sqrt((x[i]-x[j])**2 + (y[i]-y[j])**2)))
# third jump between stones
dist = max(dist, round(math.sqrt((x[i]-x[k])**2 + (y[i]-y[k])**2)))
dist = max(dist, round(math.sqrt((x[j]-x[k])**2 + (y[j]-y[k])**2)))
# last jump from a stone to the opposite shore
dist = max(dist, 10 - x[j])
best = min(dist, best)
return best
Что делать, если лучший путь не проходит через все 3 камня? – user2357112
Да, хорошая точка. Он может пройти только один, но я думаю, что решение выше учитывает это. – user35202
Ваше решение не учитывает это. Внутри трех петель вы вычисляете расстояние от одного берега до 'i', расстояние от' i' до 'j', расстояние от' i' до 'k', расстояние от' j' до 'k', и расстояние от 'j' до другого берега. Это не последовательный путь и не исчерпывающее рассмотрение всех возможных прыжков между «i',' j', 'k' и берегами. – dbliss