Алгоритм поиска минимального расстояния между объектами

Пишу простенькую демку, где одни объекты (назовем их "осами") гоняются за другими ("мухи").

"Мухи" летают хаотично, а "осы" должны выбрать для себя ближайшую цель и гоняться за ней.

При этом:

1. "Оса" должна догонять ближайшую к себе "муху" только в том случае, если ее не догоняет другая "оса", которая находится еще ближе. В этом случае "оса" должна выбрать следующую по дистанции "муху", с учетом этого же условия - никакая другая "оса" не должна быть ближе к предполагаемой "мухе". Если не получается найти подходящую "муху" - "оса" пропускает ход.

2. "Укушенная" "муха" на некоторое время превращается в "осу" и начинает гоняться за своими бывшими "коллегами" (с учетом условия описанного в п. 1).

Объектов может быть достаточно много, ориентировочно - несколько сотен. Я накидал приблизительный алгоритм реализации п.1 - он рекурсивно вычисляет расстояние от одного объекта до ближайшего.

Примерно так:

1. Берем очередную "осу".

2. Перебираем всех "мух", вычисляя расстояние, оставляем "муху" с минимальным расстоянием.

3. Далее перебираем всех "ос" уже от "мухи", найденной в п.2, оставляем "осу" с минимальным расстоянием.

4. Если "оса" из п.1 совпадает с "осой" из п.2 - то пара найдена, она помечается и исключается из дальнейших поисков.

5. Если нет - повторяем пп. 2 - 3, меняя местами "ос" и "мух" и вычисляя таким образом пару с минимальным расстоянием.

6. "Оса", оставшаяся без пары, пропускает ход.

Алгоритм получился дико громоздким, запутанным и очень медленным. Настолько медленным, что он просто не годится.

Как я понимаю, нужен оптимальный алгоритм поиска минимального расстояния между объектами, находящихся в разных множествах. Может, кто-то что-то посоветует?