Ответ Дэвида Бергера верен, если только вы не имеете в виду простой путь, где каждая вершина может встречаться не более одного раза, и в этом случае Беллман-Форд не даст самый длинный путь. Поскольку вы говорите, что веса положительные, самый длинный путь может существовать, когда у графа есть цикл (достижимый из источника), если вы не имеете в виду простой путь. Самая длинная проблема простого пути - NP-полная. См. Википедия .
Итак, давайте предположим, что вы имеете в виду ориентированный ациклический граф (DAG). В линейном времени вы можете вычислить самый длинный путь к каждой вершине v из начальной вершины s, учитывая, что вы знаете самый длинный путь из s -> * u для каждого u, где u-> v напрямую. Это просто - вы можете выполнить поиск в глубине на вашем ориентированном графе и вычислить самый длинный путь для вершин в обратном порядке их посещения. Вы также можете обнаружить задние кромки всей вашей DFS, используя 3-цветную маркировку (открытые, но не законченные вершины серого цвета). Смотрите Wikipedia снова для получения дополнительной информации. Поиск самого длинного / самого короткого пути в группе обеспечения доступности баз данных иногда называют алгоритмом Витерби (даже если он был задан в предположении, что используется определенный тип группы доступности базы данных).
Сначала я бы попробовал решение для динамического программирования с линейным временем. Если у вас есть циклы, то Bellman-Ford все равно не решит вашу проблему.