【问题标题】:2D packing with obstacles有障碍物的二维包装
【发布时间】:2010-03-26 10:17:24
【问题描述】:

有人知道在包含障碍物的正方形中移动矩形的有效算法吗?

矩形:

  • 可以旋转
  • 可以移动/传送
  • 不得与障碍物(黑色方块)碰撞

障碍:

  • 无法移动
  • 可以添加到任何地方

目标:添加障碍物时,尽量移动矩形,使其不与任何障碍物发生碰撞。

【问题讨论】:

  • @Henk Holterman:是的,他们可以传送。目标是尽可能移动它们,否则返回 false(不能以不与障碍物碰撞的方式移动它们)。
  • 怎么样?传送/移动它们和旋转多久一次?仅当添加新障碍时在哪里?在球场上的某个地方,矩形不得与障碍物发生碰撞。为什么?一个类似战舰的游戏,当你移动你的船直到你可以移动它们时——当你可以移动它们时,你把它们留在原地,然后对对手说击中。

标签: algorithm packing


【解决方案1】:

看看这个:Dynamic programming - Largest square block
基本上,给定矩形,您添加一个障碍物,然后移除障碍物干扰的正方形。
然后,运行链接算法(“限制器”是障碍物和现有正方形),如果找到可以容纳 NxN 大小的正方形的地方(N 是矩形的大部分),并添加矩形) .
这可以进一步优化,我委托你这样做。 (基本上 - 矩形并不总是放在最佳位置。这可以补救,至少在某种程度上)
此解决方案将为您添加的每个障碍物提供 O(n) 时间和空间。
您还应该考虑可能的修改:不要为每个障碍物重建阵列,而是为 void-of-obstacles 阵列构建它,并在进行时对其进行修改。这将节省每个障碍物通过整个阵列。

【讨论】:

    猜你喜欢
    • 2020-03-22
    • 2022-01-24
    • 2015-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 2022-07-22
    • 1970-01-01
    相关资源
    最近更新 更多