See my other comment in this thread on the challenges associated with incorporating turn costs and restrictions in gerenal: https://news.ycombinator.com/item?id=13616676
+
> Since you need turn restrictions if you want to compute routes that users can actually follow, adding different costs for different kinds of turns (left, right, U-turn) is easy.
Does this mean all those speed-up techniques don't produce routes that are actually allowed? What's the point of developing them?
It's easier to do research on a more limited version of the problem (shortest path in a road graph with a suitably chosen edge weight function) and then generalise than start out with the most general formulation. The results are wild: these techniques are millions of times faster than Dijkstra's algorithms and provably produce the exact same result. It's what makes Google Maps possible.
Most software will weight on rules like how long it will take to turn left rather than right at an intersection, and other average case rules at decision points.
Google Maps does not, the last time I checked, preferentially weight left turns beyond expected stoplight delay time. However, Waze does, apparently. (But this is just a comparative observation, the algorithms are not public.)