It is possible.
One way of achieving it is while you build the table - instead of only setting price, have another map:Node->Node, let it be parent
- and when you found a shorter path, in the relaxation path - also make an indication of it in the parent
map.
Pseudo code (from wikipedia):
for i from 1 to size(vertices)-1:
for each edge (u, v) with weight w in edges:
if distance[u] + w < distance[v]:
distance[v] := distance[u] + w
predecessor[v] := u
After you are done, just follow the map from target to source to get your actual path (reversed of course).
To pull the route from the map:
current := target
path := [] //empty list
while current != null:
path.addFirst(current)
current := predecessor[current]