Какой лучший алгоритм для поиска оптимального пути через определённые точки?
Очень похоже на динамику. Можно попробовать построить граф (полный?) из ключевых точек. Предпосчитать расстояние между вершинами по карте (A*). 
Далее вы либо можете либо просто придумать хитрые веса для ребер на основе длинны и рейтинга достопримечательностей в инцидентных вершинах. В этом случае нужен путь максимального веса.
Иначе надо искать путь максимального веса с ограничением на длину. Наверняка люди не захотят обходить весь город. Вроде бы по ссылке описывается что-то подобное.
Алгоритма два: поиск в глубину и поиск в ширину.
В зависимости от прямизны рук, поиск в глубину потребует меньше памяти и отработает быстрее, зато поиск в глубину найдёт оптимальный (кратчайший по количеству хопов) путь. Для поиска в ширину потребуется либо модификация данных в графе, либо отдельно хранить уже посещённые узлы и узлы, которые обрабатываются на текущей итерации.
Ну и хорошо бы не впадать в шок при слове "рекурсия".)