Блог пользователя md.ashif313

Автор md.ashif313, история, 7 лет назад, По-английски

I'm trying to find efficient algorithm for finding shortest path in weighted(Positive/Negative) graph with maximum edge limit.

For example, in the graph below if we demand the shortest path from A to C with restriction the path can contain at most two edges. It would be A->B->C and total cost 5 (Which is greater than A->D->E->C)

Weighted graph without negative edge.

I think when the graph is (directed or undirected) has no negative edge, we can use Dijkstra with little modification, such that we will keep the number of edges in the currently discovered shortest path from source to currently used vertex for relaxation. Is my idea OK? Or there is much better something?

And how can we solve the similar problem when the graph(directed) consists of negative edges(but no negative cycle)?

  • Проголосовать: нравится
  • +8
  • Проголосовать: не нравится

»
7 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

I think Bellman-Ford algorithm is exactly what you need

  • »
    »
    7 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Hi Morozov, Thank You for reply :) Can you please give me some more details about your Idea...

    And if you don't mind can you please specify any pitfall to use Dijkstra when the graph does not contain any negative edge.

»
7 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится

Calculate for each node x and nonnegative integer k < n the number dx, k, the length of the shortest path from the starting node to x which uses exactly k edges. The recurrence is similar to what you have in Dijkstra's algorithm, if edge weights are nonnegative, of course. If you have negative edges you can apply the same modification to the Bellman-Ford algorithm.

Maybe there is a faster solution though?

»
3 года назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

Hi, I am stuck at the exact same problem now. Were you able to figure out the solution for it?

  • »
    »
    3 года назад, # ^ |
      Проголосовать: нравится +1 Проголосовать: не нравится

    It's Bellman-Ford's algorithm. Other alternatives include SPFA (Shortest path faster algorithm) and it has significant improvements. They're relatively the same complexity, but SPFA can have a best case O(M).