 # pgr_astar - Shortest Path A*¶

## Name¶

pgr_astar — Returns the shortest path using A* algorithm.

## Synopsis¶

The A* (pronounced “A Star”) algorithm is based on Dijkstra’s algorithm with a heuristic that allow it to solve most shortest path problems by evaluation only a sub-set of the overall graph. Returns a set of pgr_costResult (seq, id1, id2, cost) rows, that make up a path.

```pgr_costResult[] pgr_astar(sql text, source integer, target integer,
directed boolean, has_rcost boolean);
```

## Description¶

sql:

a SQL query, which should return a set of rows with the following columns:

```SELECT id, source, target, cost, x1, y1, x2, y2 [,reverse_cost] FROM edge_table
```
id: int4 identifier of the edge int4 identifier of the source vertex int4 identifier of the target vertex float8 value, of the edge traversal cost. A negative cost will prevent the edge from being inserted in the graph. x coordinate of the start point of the edge y coordinate of the start point of the edge x coordinate of the end point of the edge y coordinate of the end point of the edge (optional) the cost for the reverse traversal of the edge. This is only used when the directed and has_rcost parameters are true (see the above remark about negative costs).
source:

int4 id of the start point

target:

int4 id of the end point

directed:

true if the graph is directed

has_rcost:

if true, the reverse_cost column of the SQL generated set of rows will be used for the cost of the traversal of the edge in the opposite direction.

Returns set of pgr_costResult[]:

seq: row sequence node ID edge ID (-1 for the last row) cost to traverse from id1 using id2

History

• Renamed in version 2.0.0

## Examples¶

• Without reverse_cost
```SELECT seq, id1 AS node, id2 AS edge, cost
FROM pgr_astar(
'SELECT id, source, target, cost, x1, y1, x2, y2 FROM edge_table',
4, 1, false, false
);

seq | node | edge | cost
-----+------+------+------
0 |    4 |   16 |   1
1 |    9 |    9 |   1
2 |    6 |    8 |   1
3 |    5 |    4 |   1
4 |    2 |    1 |   1
5 |    1 |   -1 |   0

(4 rows)
```
• With reverse_cost
```SELECT seq, id1 AS node, id2 AS edge, cost
FROM pgr_astar(
'SELECT id, source, target, cost, x1, y1, x2, y2, reverse_cost FROM edge_table',
4, 1, true, true
);

seq | node | edge | cost
-----+------+------+------
0 |    4 |    3 |    1
1 |    3 |    2 |    1
2 |    2 |    1 |    1
3 |    1 |   -1 |    0
(4 rows)
```

The queries use the Sample Data network.