Как написать алгоритм поиска соседних элементов?
Если хранить координаты в отсортированном массиве (X и Y отдельно), то проверять нужно будет только ближайших соседей, до тех пор, пока разница координат не превысит вашего минимального расстояния. Такая оптимизация тем эффективнее, чем меньше данное расстояние относительно размеров поля. Плюс кэшировать результаты сравнений, чтобы не проверять уже проверенные пары. Далее можно убивать кэш не каждый кадр, можно в четных кадрах искать вверх по массиву, а в нечетных - вниз и т.п. Но это уже по факту, если потребуется.
Кластерный анализ? 
Если учились в  вузе должны были проходить, это как раз тот случай когда академические знания могут пригодиться.