如何判断一个单位的士兵是否在网格地图上连接

时间:2012-08-06 13:41:13

标签: c++ algorithm game-engine graph-algorithm game-physics

我正在制作游戏,地图就像网格,我有几个单位(每个单位都有几个士兵)。如何判断来自一个单位的士兵是否已连接(连接意味着每个士兵至少在一个方向上为邻居提供来自同一单位的士兵)。地图是网格,相邻的单元格是两个,它们在x和/或y上只有1个不同(除边框之外的每个单元格都有8个相邻单元格,如矩阵)。

2 个答案:

答案 0 :(得分:3)

您可以在此处使用flood fill,您的图表为G=(V,E),其中V为网格,E = { (u,v) | there is a soldier in both u and v from the same unit }

基本上,当你将问题减少到这个图时,任何图发现算法都会这样做。从所需单元中的任何士兵调用算法,如果发现算法发现完全 k个节点,您可以判断该单元是否已“连接”,其中k是单位士兵的数量。

答案 1 :(得分:1)

使用union-find数据结构。测试每对士兵。每当两名士兵相邻时,他们的等价等级就会被合并。在对所有这些对进行测试之后,如果您最终得到一个等价类,则您的单元将被连接。