• Dijkstra and Bellman-Ford-Moore's algorithms

    From rami18@21:1/5 to All on Sun Jul 2 07:15:26 2017
    Hello,


    Dijkstra and Bellman-Ford-Moore's algorithms

    Dijkstra's algorithm for Delphi and FreePascal. Computes the shortest
    path tree. Assumes all weights are nonnegative.
    and

    Bellman-Ford-Moore's algorithm for Delphi and FreePascal, computes the
    shortest path tree. The edge weights can be positive, negative or zero.

    Version: 1.21


    Authors: Robert Sedgewick, Kevin Wayne
    and enhanced by Amine Moulay Ramdane

    Email: aminer@videotron.ca

    Description:

    This project consists of this optimal implementation that uses
    Dijkstra's algorithm with a binary heap that takes a time complexity of E*log(V), V is the number of vertices and E is the number of edges. This library can be used in parallel clusters manner by dividing your graph
    in many parts to speed much your parallel algorithm, also i have added
    an option to the algorithm that permits you to pass the edges of the
    graph that you can substract from your graph to be able to give you
    algorithm more control if you want for example to ignore congestions in
    some roads...

    You have to have a 32 bit or 64 bit java compiler and you have to
    compile first the java library by running the compile1.bat batch file,
    after that if you have compiled it with a 32 bit java compiler just
    compile after that test1.pas with a 32 bit delphi or freepascal
    compiler, but if you have compiled it with a 64 bit java compiler just
    compile after that test1.pas with a 64 bit delphi or freepascal compiler.

    This project also consists also of this optimal implementation that uses Bellman-Ford-Moore's algorithm that takes a time complexity of V*E, V is
    the number of vertices and E is the number of edges. This library can be
    used in parallel clusters manner by dividing your graph in many parts to
    speed much your parallel algorithm, also i have added an option to the algorithm that permit you to pass the edges of the graph that you can
    substract from your graph to be able to give you algorithm more control
    if you want for example to ignore congestions in some roads...

    The Bellman-Ford-Moore (BFM) algorithm which predates Dijkstra by 4 or 5
    years. Better still, BFM is robust in the sense that it can handle
    negative arc-weights and detect and find negative cycles. Dijkstra
    cannot do this.

    You have to have a 32 bit or 64 bit java compiler and you have to
    compile first the java library by running the compile2.bat batch file,
    after that if you have compiled it with a 32 bit java compiler just
    compile after that test2.pas with a 32 bit delphi or freepascal
    compiler, but if you have compiled it with a 64 bit java compiler just
    compile after that test2.pas with a 64 bit delphi or freepascal compiler.

    You have two procedures to call, here they are:

    procedure solveDijkstra(filename:string;source:integer;
    destination:integer;var edgesToSustract:arr3;var edges:TDijkstraInfo;var totalNumberOfVertices:integer;var distanceShortestPath:system.double);

    procedure solveBellmanFord(filename:string;source:integer; destination:integer;var edgesToSustract:arr3;var edges:TDijkstraInfo;var totalNumberOfVertices:integer;var distanceShortestPath:system.double);

    The arguments are the same, here they are:

    Filename: is the filename to pass, the file is organized as:

    You write the number of vertices in the first line, and after that you
    write the number of edges in the second line and after that you write
    the edge and its weight in the each line.

    source: is the source vertex.

    destination: is the destination vertex.

    edgesToSustract: is the edges to substract from the graph,
    you can pass the edges that you want to substract by passing the edges
    in an array, the edges must be arranged two by two in the array, the
    first and the second element of the array is the first edge that you
    want to substract etc., i have enhanced the algorithm with this new option.

    edges: is the returned edges of the shortest path.

    totalNumberOfVertices: is the returned total number of vertices of the
    graph.

    distanceShortestPath: is the returned shortest path distance.

    Have fun with it !


    You can download this library from:

    https://sites.google.com/site/aminer68/dijkstra-and-bellman-ford-moore-s-algorithms


    Thank you,
    Amine Moulay Ramdane.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)