Алгоритм кратчайшего пути для аналоговых часов - PullRequest
3 голосов
/ 07 марта 2011

У меня проблема с домашним заданием, которая заставляет меня задуматься, и буду очень признателен, если кто-нибудь поможет мне в правильном направлении.

Если у меня есть две минуты на аналоговых часах, таких как t1 (55 минут) и t2 (7 минут), мне нужно рассчитать кратчайшее количество шагов между двумя точками.

До сих пор я придумал эти два уравнения:

-t1 + t2 + 60 =
    -55 + 7 + 60 
    = 12

t1 - t2 + 60 = 
    55 - 7 + 60 
    = 108

12 is lower then 108, therefore 12 steps is the shortest distance.

Кажется, это работает нормально, если я сравниваю два результата и использую самые низкие. Однако, если я выберу еще две точки, например, пусть t1 = 39 и t2 = 34 и включу их в уравнение:

-t1 + t2 + 60 = -39 + 34 + 60 = 55
t1 - t2 + 60 = 39 - 34 + 60 = 35

35 is lower then 55, therefore 35 steps is the shortest distance.

Однако 35 не правильный ответ. 5 шагов - самое короткое расстояние (39 - 34 = 5).

Мой мозг немного жарен, и я знаю, что упускаю что-то простое. Кто-нибудь может помочь?

Analog clock face

Ответы [ 2 ]

5 голосов
/ 07 марта 2011

То, что вы хотите, это сложение и вычитание по модулю 60. Проверьте оператор %.Убедитесь, что вы правильно обрабатываете негативы.

0 голосов
/ 07 марта 2011

Если вы не хотите использовать оператор%, попробуйте так: для каждой пары точек (t1; t2) у вас будет два способа их соединения: один путь пересечет 0 (12 часов), а другой - нет.

При условии, что t2> = t1 , второе расстояние легко вычислить: это t2 - t1. другое расстояние t1 + 60 - t2

Я думаю, что ваша ошибка была добавлением 60 в первом выражении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...