This is a very simple C++ implementation of the A* algorithm for pathfinding
on a two-dimensional grid. The compiled astar.so
file is callable from Python. See pyastar.py
for the Python wrapper and
examples.py
for example usage.
I recently needed an implementation of the A* algorithm in Python. Normally I would simply use networkx, but for graphs with millions of nodes the overhead incurred to construct the graph can be expensive. Considering that my use case was so simple, I decided to implement it myself.
- Run
make
to build the shared object fileastar.so
. - Set the
MAZE_FPATH
andOUTP_FPATH
as desired inexamples.py
. - Run
python examples.py
.
To test the implementation, I grabbed two nasty mazes from Wikipedia. They are
included in the mazes
directory, but are originally from here:
Small and
Large.
I load the .png
files as grayscale images, and set the white pixels to 1
(open space) and the black pixels to INF
(walls).
Run the code on the small maze:
time python examples.py
loaded maze of shape (1802, 1802)
found path of length 10031 in 0.258270s
plotting path to solns/maze_small_soln.png
done
real 0m2.319s
user 0m0.403s
sys 0m1.691s
The solution is visualized below:
Run the code on the large maze:
loaded maze of shape (4002, 4002)
found path of length 783736 in 3.886067s
plotting path to solns/maze_large_soln.png
done
real 0m6.495s
user 0m4.007s
sys 0m2.273s