给定一个大的二维矩阵,我可以独特地适应多少小尺寸的二维矩阵?

时间:2013-02-11 06:02:02

标签: c++ math matrix

我有一个大型2D矩阵,代表3D游戏的2D地形 - 各种类型的墙壁和地板(泥土,岩石等)。 比如让我们说有一块4x9的岩层。我要求在4x9空间的每个3x3区域的中心放置一个对象,并在解析和排除3x3区域后将对象放置在每个1x1区域。

结果应该是放置3x3模板的3个对象和放置1x1模板的9个对象。

实施此算法的最有效方法是什么?

1 个答案:

答案 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 + ?)