Могут быть и другие способы сделать это, но я просто провел последние 10 минут, глядя на то, чтобы сделать что-то подобное, и наткнулся на этот вопрос.
Я бы использовал неориентированный (& взвешенный - как я хочу посмотреть на местоположение) график - используйте JgraphT или аналогичный в py; JGraphT основан на Java, но включает в себя различные заранее написанные алгоритмы.
Затем вы можете использовать алгоритм BellmanFord; принимает целочисленный ввод и ищет на графике кратчайший путь с целочисленным вводом, и только целочисленный ввод, в отличие от Дейкстры.
http://en.wikipedia.org/wiki/Bellman%E2%80%93Ford_algorithm
Я недавно использовал его в проекте для маршрутизации полета, итерируя, чтобы найти кратчайший путь с кратчайшими «скачками» (ребрами).