В 2D игре, с которой я работаю, игровой движок может дать мне для каждого юнита список других юнитов, которые находятся в пределах его видимости.
Я хотел бы знать, если существует установленный алгоритм для сортировки единиц в группы , где каждая группа будет определяться всеми теми единицами, которые «связаны» друг с другом (даже через других).
Пример может помочь лучше понять вопрос (E = враг, O = собственный отряд). Сначала данные, которые я получу от игрового движка:
E1 can see E2, E3, O5
E2 can see E1
E3 can see E1
E4 can see O5
E5 can see O2
E6 can see E7, O9, O1
E7 can see E6
O1 can see E6
O2 can see O5, E5
O5 can see E1, E4, O2
O9 can see E6
Затем я должен вычислить группы следующим образом:
G1 = E1, E2, E3, E4, E5, O2, O5
G2 = O1, O9, E6, E7
Можно смело предположить, что для поля зрения существует коммутативное свойство: [если A видит B, то B видит A].
Просто для пояснения: я уже написал наивную реализацию, которая зацикливается на каждой строке информации о игровом движке, но, судя по всему, кажется, что проблема достаточно общая, чтобы ее можно было подробно изучить и иметь различные установленные алгоритмы (возможно, прохождение через какую-то древовидную структуру?). Моя проблема в том, что я не смог найти способ описать мою проблему, которая принесла полезные хиты Google.
Заранее спасибо за вашу помощь!