dykestra's algorithm
12 following