我有一个大型2D矩阵,代表3D游戏的2D地形 - 各种类型的墙壁和地板(泥土,岩石等)。 比如让我们说有一块4x9的岩层。我要求在4x9空间的每个3x3区域的中心放置一个对象,并在解析和排除3x3区域后将对象放置在每个1x1区域。
结果应该是放置3x3模板的3个对象和放置1x1模板的9个对象。
实施此算法的最有效方法是什么?
答案 0 :(得分:1)
让canPlace
成为坐标的BST。
for (x = 0:w)
for (y = 0:h)
shouldPlace = true
for (x2 = -1:1)
for (y2 = -1:1)
if (grid[x+x2][y+y2].isObstruction())
shouldPlace = false
if (shouldPlace)
canPlace.add((x,y))
上述复杂性为O(n^2 log n)
递归尝试所有canPlace
位置以放置3x3对象。
当您这样做时,请将您放置的区域标记为遮挡,并在放置前检查是否阻塞。
以上复杂度=? (更多可能的位置使我们能够很快找到解决方案)
for (x = 0:w)
for (y = 0:h)
if (grid[x][y].isEmpty())
place1x1(x, y)
高于复杂度= O(n^2)
总复杂度= O(n^2 log n + ?)