pgr_bdDijkstra  pgRouting Manual (3.3)
pgr_bdDijkstra
pgr_bdDijkstra
 Returns the shortest path(s) using Bidirectional Dijkstra algorithm.
Availability:

Version 3.2.0

New proposed function:

pgr_bdDijkstra(Combinations)



Version 3.0.0

Official function


Version 2.5.0

New Proposed functions:

pgr_bdDijkstra(One to Many)

pgr_bdDijkstra(Many to One)

pgr_bdDijkstra(Many to Many)



Version 2.4.0

Signature change on pgr_bdDijsktra(One to One)

Old signature no longer supported



Version 2.0.0

Official pgr_bdDijkstra(One to One)

Description
The main characteristics are:

Process is done only on edges with positive costs.

Values are returned when there is a path.

When the starting vertex and ending vertex are the same, there is no path.

The agg_cost the non included values (v, v) is 0


When the starting vertex and ending vertex are the different and there is no path:

The agg_cost the non included values (u, v) is \(\infty\)


Running time (worse case scenario): \(O((V \log V + E))\)

For large graphs where there is a path bewtween the starting vertex and ending vertex:

It is expected to terminate faster than pgr_dijkstra

Signatures
Summary
pgr_bdDijkstra(Edges SQL, start_vid, end_vid [, directed])
pgr_bdDijkstra(Edges SQL, start_vid, end_vids [, directed])
pgr_bdDijkstra(Edges SQL, start_vids, end_vid [, directed])
pgr_bdDijkstra(Edges SQL, start_vids, end_vids [, directed])
pgr_bdDijkstra(Edges SQL, Combinations SQL [, directed])
RETURNS SET OF (seq, path_seq [, start_vid] [, end_vid], node, edge, cost, agg_cost)
OR EMPTY SET
Using defaults
pgr_bdDijkstra(Edges SQL, start_vid, end_vid)
RETURNS SET OF (seq, path_seq, node, edge, cost, agg_cost)
OR EMPTY SET
 Example :

From vertex \(2\) to vertex \(3\)
SELECT * FROM pgr_bdDijkstra(
'SELECT id, source, target, cost, reverse_cost FROM edge_table',
2, 3
);
seq path_seq node edge cost agg_cost
+++++
1 1 2 4 1 0
2 2 5 8 1 1
3 3 6 9 1 2
4 4 9 16 1 3
5 5 4 3 1 4
6 6 3 1 0 5
(6 rows)
One to One
pgr_bdDijkstra(Edges SQL, start_vid, end_vid [, directed])
RETURNS SET OF (seq, path_seq, node, edge, cost, agg_cost)
OR EMPTY SET
 Example :

From vertex \(2\) to vertex \(3\) on an undirected graph
SELECT * FROM pgr_bdDijkstra(
'SELECT id, source, target, cost, reverse_cost FROM edge_table',
2, 3,
false
);
seq path_seq node edge cost agg_cost
+++++
1 1 2 2 1 0
2 2 3 1 0 1
(2 rows)
One to many
pgr_bdDijkstra(Edges SQL, start_vid, end_vids [, directed])
RETURNS SET OF (seq, path_seq, end_vid, node, edge, cost, agg_cost)
OR EMPTY SET
 Example :

From vertex \(2\) to vertices \(\{3, 11\}\) on a directed graph
SELECT * FROM pgr_bdDijkstra(
'SELECT id, source, target, cost, reverse_cost FROM edge_table',
2, ARRAY[3, 11]);
seq path_seq end_vid node edge cost agg_cost
++++++
1 1 3 2 4 1 0
2 2 3 5 8 1 1
3 3 3 6 9 1 2
4 4 3 9 16 1 3
5 5 3 4 3 1 4
6 6 3 3 1 0 5
7 1 11 2 4 1 0
8 2 11 5 8 1 1
9 3 11 6 11 1 2
10 4 11 11 1 0 3
(10 rows)
Many to One
pgr_bdDijkstra(Edges SQL, start_vids, end_vid [, directed])
RETURNS SET OF (seq, path_seq, start_vid, node, edge, cost, agg_cost)
OR EMPTY SET
 Example :

From vertices \(\{2, 7\}\) to vertex \(3\) on a directed graph
SELECT * FROM pgr_bdDijkstra(
'SELECT id, source, target, cost, reverse_cost FROM edge_table',
ARRAY[2, 7], 3);
seq path_seq start_vid node edge cost agg_cost
++++++
1 1 2 2 4 1 0
2 2 2 5 8 1 1
3 3 2 6 9 1 2
4 4 2 9 16 1 3
5 5 2 4 3 1 4
6 6 2 3 1 0 5
7 1 7 7 6 1 0
8 2 7 8 7 1 1
9 3 7 5 8 1 2
10 4 7 6 9 1 3
11 5 7 9 16 1 4
12 6 7 4 3 1 5
13 7 7 3 1 0 6
(13 rows)
Many to Many
pgr_bdDijkstra(Edges SQL, start_vids, end_vids [, directed])
RETURNS SET OF (seq, path_seq, start_vid, end_vid, node, edge, cost, agg_cost)
OR EMPTY SET
 Example :

From vertices \(\{2, 7\}\) to vertices \(\{3, 11\}\) on a directed graph
SELECT * FROM pgr_bdDijkstra(
'SELECT id, source, target, cost, reverse_cost FROM edge_table',
ARRAY[2, 7], ARRAY[3, 11]);
seq path_seq start_vid end_vid node edge cost agg_cost
+++++++
1 1 2 3 2 4 1 0
2 2 2 3 5 8 1 1
3 3 2 3 6 9 1 2
4 4 2 3 9 16 1 3
5 5 2 3 4 3 1 4
6 6 2 3 3 1 0 5
7 1 2 11 2 4 1 0
8 2 2 11 5 8 1 1
9 3 2 11 6 11 1 2
10 4 2 11 11 1 0 3
11 1 7 3 7 6 1 0
12 2 7 3 8 7 1 1
13 3 7 3 5 8 1 2
14 4 7 3 6 9 1 3
15 5 7 3 9 16 1 4
16 6 7 3 4 3 1 5
17 7 7 3 3 1 0 6
18 1 7 11 7 6 1 0
19 2 7 11 8 7 1 1
20 3 7 11 5 10 1 2
21 4 7 11 10 12 1 3
22 5 7 11 11 1 0 4
(22 rows)
Combinations
pgr_bdDijkstra(Edges SQL, Combinations SQL [, directed])
RETURNS SET OF (seq, path_seq, start_vid, end_vid, node, edge, cost, agg_cost)
OR EMPTY SET
 Example :

Using a combinations table on a directed graph.
SELECT * FROM pgr_bdDijkstra(
'SELECT id, source, target, cost, reverse_cost FROM edge_table',
'SELECT * FROM ( VALUES (2, 3), (7, 11) ) AS t(source, target)');
seq path_seq start_vid end_vid node edge cost agg_cost
+++++++
1 1 2 3 2 4 1 0
2 2 2 3 5 8 1 1
3 3 2 3 6 9 1 2
4 4 2 3 9 16 1 3
5 5 2 3 4 3 1 4
6 6 2 3 3 1 0 5
7 1 7 11 7 6 1 0
8 2 7 11 8 7 1 1
9 3 7 11 5 10 1 2
10 4 7 11 10 12 1 3
11 5 7 11 11 1 0 4
(11 rows)
Parameters
Parameter 
Type 
Default 
Description 

Edges SQL 

Edges query as described below 

Combinations SQL 

Combinations query as described below 

start_vid 

Identifier of the starting vertex of the path. 

start_vids 

Array of identifiers of starting vertices. 

end_vid 

Identifier of the ending vertex of the path. 

end_vids 

Array of identifiers of ending vertices. 

directed 



Inner queries
Edges query
Column 
Type 
Default 
Description 

id 

Identifier of the edge. 

source 

Identifier of the first end point vertex of the edge. 

target 

Identifier of the second end point vertex of the edge. 

cost 

Weight of the edge (source, target)


reverse_cost 

1 
Weight of the edge (target, source) ,

Where:
 ANYINTEGER :

SMALLINT, INTEGER, BIGINT
 ANYNUMERICAL :

SMALLINT, INTEGER, BIGINT, REAL, FLOAT
Combinations query
Column 
Type 
Default 
Description 

source 

Identifier of the first end point vertex of the edge. 

target 

Identifier of the second end point vertex of the edge. 
Where:
 ANYINTEGER :

SMALLINT, INTEGER, BIGINT
Result Columns
Returns set of
(seq,
path_id,
path_seq
[,
start_vid]
[,
end_vid],
node,
edge,
cost,
agg_cost)
Column 
Type 
Description 

seq 

Sequential value starting from 1 . 
path_id 

Path identifier. Has value
1
for the first of a path. Used when there are multiple paths for the same

path_seq 

Relative position in the path. Has value 1 for the beginning of a path. 
start_vid 

Identifier of the starting vertex. Returned when multiple starting vetrices are in the query. 
end_vid 

Identifier of the ending vertex. Returned when multiple ending vertices are in the query. 
node 

Identifier of the node in the path from

edge 

Identifier of the edge used to go from

cost 

Cost to traverse from

agg_cost 

Aggregate cost from

See Also

The queries use the Sample Data network.
Indices and tables