Я сначала тоже не мог понять почему они останавливаются, когда понял, что причина в неправильном вычислении координат, перепахал весь код, потом два дня ловил баги, после этого начал бороться с последствиями, а не причиной.
Но я просто изначально запоминаю координату центра муравейника и каждый раз при возвращении вычисляю направление и расстояние, если расстояние меньше длины шага, а муравейника так и нет, то врубаю поиск.
Т.к. возможна ситуация, что я мир уже обошел и снова возвращаюсь к муравейнику, то сбрасываю его координату, что бы минимизировать вероятность таких ситуаций: По этому мне несколько обидно слышать, что я забыл/забил/неправильно понял и т.п. Основное время тратится на прогоны, прогоны и еще раз прогоны. Что бы понять логику, уловить закономерности и попробовать улучшить сделанное, а 10-12 часов это не мало.