jgrapht поддерживает идею размещения веса (стоимости) на ребре/вершине между двумя узлами. Этого можно добиться с помощью класса DefaultWeightedEdge.
В моем графе есть требование найти не кратчайший путь, а самый дешевый. Самый дешевый путь может быть длиннее/иметь больше узлов перехода, чем самый короткий путь. Поэтому для этого можно использовать алгоритм DijkstraShortestPath.
Однако мой вариант использования немного сложнее: он также должен оценивать затраты на действия, которые необходимо выполнить при достижении узла.
Допустим, у вас есть граф, похожий на шахматную доску (8x8 полей, каждое поле является узлом). Все ребра имеют вес 1. Чтобы двигаться в машине из левого нижнего угла в диагональный угол (правый верхний), есть много путей стоимостью 16. Вы можете выбрать диагональный путь в стиле зик-зак, или вы может сначала пройти все узлы вправо, а затем все узлы вверх. Разница в том, что при выполнении зикзака вам нужно вращаться в направлении движения. Вы вращаетесь 16 раз. При перемещении сначала вправо, а затем вверх вам нужно повернуться только один раз (может быть, два раза, в зависимости от вашей начальной ориентации). Таким образом, путь зик-зак, с точки зрения джикстры, идеален. С логической точки зрения это худшее.
Короче говоря: как я могу установить некоторые затраты на узел или ребро в зависимости от предыдущего ребра/узла на этом пути? Я не нашел ничего похожего в исходном коде jgrapht. Или есть лучший алгоритм для использования?