Я бы смотрел в сторону поиска путей. Алгоритмов множество — A* (A star), волновой и т.д. Лично у меня имеется опыт волнового алгоритма — в реализации довольно простой. А* в свое время осилить не смог.
Рассчитываете «расстояние» между точками, и начинаете от самых близких друг к другу. Как только построили путь — эти точки(клетки), которые в него входят, более не доступны при расчете для следующего пути. Полную заполняемость поля можно добиться «играясь» с кол-вом точек.