Given a graph and a source vertex in the graph, Dijkstra’s algorithm finds the shortest paths from source to all vertices in the given graph. It takes as input an oriented graph weighted by real positive numbers and a top source as root. This is to build gradually a subgraph where the different vertices are classified in ascending order according their minimum distance from the root. The distance is the sum of the weights of the arcs followed.
The syntax of the Dijkstra algorithm is as follows :
pgr_dijkstrar ( sql text , source integer , target integer , directed boolean );
Where source is the desired starting point desired, target is the end point of the route and the chain sql is as follows:
SELECT id, source, target, cost [, reverse_cost ] FROM network
The “directed” Boolean variable allows taking into account of one-way route. By default it is ” true “.
The order returns a set of elements ( seq , path_seq [, start_vid ] [, end_vid ], node, edge, cost, agg_cost ). Unlike the A * algorithm, which has a starting point and an end point for the route, the Dijstra algorithm admits several points of entry and exit.
In the output set, seq is the order number of the segment in the global set , path_seq is the order number of the segment in the route , start_vid and end_vid are the point of departure and arrival of the route and are not informed unless there are several sources or targets in parameter of the algorithm , node and edge are the start and end points of the section considered , cost is the cost of the sectionand agg_cost is the cost accrued since the departure of the route .
Choice of the “cost ” of a section .
The shortest path algorithm searches the path with the lowest cost. According to your goals , it is up to you to decide which cost element you going take into account.
Let’s take back our OpensStreetMap database . You have a “cost” field that considers the length of the section in degrees . If you use this field in the Dijkstra algorithm as cost value, the proposed route will be the shortest path between the two selected points . Let’s see an example .
The following order calculates the route between the points 69072 and
64204 by using the “cost” field which corresponds to the length of
the section .
SELECT seq , path_seq , node, edge,
di.cost , agg_cost , the_geom
FROM pgr_dijkstra (
‘SELECT gid as id, source, target, cost, reverse_cost FROM public.ways ‘,
69072, 64204, false ) as di
JOIN public.ways ways_vertices_pgr
ON di.edge = ways_vertices_pgr.gid ;

Once loaded in QGis, the result is the same as for algorithm A *

Problems
When comparing this algorithm with the algorithm A *, you will notice that there is less need to formatting the layer network . By cons, if you use the cost_s and reverse_cost_s fields , you will obtain the same error messages as if there were null values . Refer to a previous article ( Developping an application with pgrouting in Windows (2): the algorithm A * ) to solve these problems . For this article we use pgrouting version 2.2.3. If you use earlier versions you can encounter a source and target field type problem of your database:

Indeed , if the number of nodes in your network is high, the source and target fields can be bigint type . Earlier pgRouting versions did not take into account this type of integer .
Check your version with the SQL query
SELECT pgr_version ();
Multiple routes
Here is an example of a path calculation with three starting points and one arrival point :
SELECT seq , path_seq , start_vid , node, edge, di.cost ,
agg_cost , the_geom
FROM pgr_dijkstra (
‘SELECT gid as id, source, target, cost_s as cost, reverse_cost_s as
reverse_cost FROM public.ways ‘,
ARRAY [69072,21576,62667] , 64204, true ) as di
JOIN public.ways ways_vertices_pgr
ON di.edge = ways_vertices_pgr.gid ;
This request calculates the paths between the
starting points 69072, 21576 and 62667 and the point of arrival 64204

Once QGis is loaded, the result is the following

Variant pgr_dijkstraCost
You have a Dijkstra algorithm variant with which you state the starting and arrival point and in return you retrieve the total cost of the path.
Here is an example with the path between points 69072 and 64204
SELECT * FROM pgr_dijkstraCost (
‘SELECT gid as id, source, target, cost_s as cost, reverse_cost_s as
reverse_cost FROM public.ways ‘,
69072, 64204);
