0

Предположим, у вас есть игровая плата n x n, и у вас есть персонаж, который может двигаться как рыцарь на шахматной доске, за исключением того, что он не может двигаться вверх или влево. И каждый блок, в который он перемещается, имеет значение, которое может быть накоплено в его точках. Игрок пытается максимизировать очки и достигает TОптимизация движения на борту

Я придумал решение, но им интересно, где он может потерпеть неудачу и его время работы.

Моя идея состояла в том, чтобы создать ориентированный взвешенный график (точки как веса) для каждого возможного пункта назначения и запустить алгоритм Дейкстры на графике, однако вместо кратчайшего пути мы найдем самый длинный путь: .

Picture

Я предполагаю, что во время выполнения будет O (некоторые вещи + | E | + | V | войти || V |)

Я не уверен, что что-то есть.

+0

Мне кажется, что график ацикличен, в этом случае есть быстрые алгоритмы: [ref1] (http://cs.stackexchange.com/questions/11295/finding-shortest-and-longest-paths-between -two-vertices-in-a-dag) [ref2] (http://stackoverflow.com/questions/2525316/longest-acyclic-path-in-a-directed-unweighted-graph), [ref3] (https: //en.wikipedia.org/wiki/Longest_path_problem#Acyclic_graphs_and_critical_paths) – Nabla

+0

Алгоритм не работает, могут быть циклические случаи – RandomGuy

+0

Хм Я думал, что ваше ограничение на движение вниз и вправо сделает это ацикличным. – Nabla

ответ

1

Dijkstra не подходит для поиска максимального пути. В ordrer, чтобы найти максимальный путь, вы должны умножить каждый вес кромки на -1, и хорошо известно, что dijkstra не работает правильно на графике с отрицательными весами. Вместо этого вам нужно будет использовать Bellman-Ford algorithm. После этого сложность будет O(| V | · | E |), как указано в статье wikipedia.

+0

Ваш ответ работает, но я думаю, что Дейкстра также будет работать, потому что никогда не будет отрицательный край. Я никогда не думал о том, чтобы умножить на -1 и найти кратчайший путь, умный. – RandomGuy

+0

@RandomGuy, если вы умножаете все ребра на '-1' ** все ** ребра будут отрицательными –

Смежные вопросы