У меня проблема с поиском кратчайшего пути в положительно взвешенном направленном ациклическом графе, но с ограничением максимального количества шагов N (ребер на пути). Предполагается, что путь существует. Дополнительным свойством графа является то, что если ребро (i, j) находится в графе, то любое ребро (i, k) также находится в графе для i ‹k‹ j. Меня интересует только кратчайший путь от начала до конца графа (после топологической сортировки).
Я знаю, что существует эффективный алгоритм кратчайшего пути в направленном ациклическом графе в O (V + E), но он не учитывает ограничение количества шагов. Я не могу придумать, как сделать это O ((V + E) * N), но это была бы идеальная производительность, поскольку она должна быть достаточно хорошей для обработки графиков из 1000 узлов и 100 шагов.
Например, рассмотрим следующий график.
Задача состоит в том, чтобы найти кратчайший путь, используя не более k = 3 шагов (ребер). Ответ - 6 (путь 1-> 4-> 5-> 6).