implement A* algorithm
Merge branch 'dev'