【问题标题】:Convert diamond matrix 2d coordinates to 1d index and back将菱形矩阵 2d 坐标转换为 1d 索引并返回
【发布时间】:2018-10-15 06:06:40
【问题描述】:

我有一个 2d 游戏板,随着瓷砖添加到板上而扩展。瓷砖只能在上、下、左、右位置与现有瓷砖相邻。

所以我认为菱形螺旋矩阵是存储板的最有效方式,但我找不到将 x,y 坐标转换为一维数组索引或反向操作的方法。

喜欢这个布局

  X -3 -2 -1  0  1  2  3
Y 3          13
  2       24  5 14
  1    23 12  1  6  15  
  0 22 11  4  0  2   7 16
 -1    21 10  3  8  17
 -2       20  9 18
 -3          19

图块 1 将始终位于位置 0,图块 2 将位于 1、2、3 或 4,图块 3 将位于 1 到 12 等位置。

所以我需要一个算法,从 X,Y 到索引,从索引返回到原始 X 和 Y。

任何人都知道如何做到这一点,或者推荐另一种适合我需要的空间填充算法。我可能会使用 Java,但更喜欢语言中立的东西。

谢谢

【问题讨论】:

标签: matrix spiral


【解决方案1】:

从问题陈述中我可以理解,不能保证瓷砖会在两侧均匀填充。例如:

  X -3 -2 -1  0  1  2  3
Y 3                 6
  2           3  4  5
  1           1      
  0           0  2  
 -1    

所以,我认为菱形矩阵不是最佳选择。 我建议将它们存储在哈希图中,例如为 2 个字母单词实现字典。 此外,您需要更具体地了解您的要求。比如,你是否优先考虑空间复杂性?或者您是否想要快速访问时间并且不太关心内存使用情况。

重要提示:

还有,什么是

  • 我们必须持有的最大牌数
  • 板的最大宽度和高度。

【讨论】:

  • 最大瓦片数和最大宽度和高度都是未知的。 (可能有大约 100 个图块的实际限制,因此最大尺寸为 200x200) 游戏板可以向任何方向生长。这就是为什么我认为二维数组不适合的原因,我不得不任意限制电路板的大小。我猜想以 2d 坐标为键的 HashMap 是最合适的。没有速度或尺寸问题来保证新颖的解决方案。我只是想看看是否存在代表它的东西。谢谢。
  • 如果是这样,并且您并不真正关心空间和时间,那么哈希映射确实可能是通用操作的最佳选择。如果您需要一遍又一遍地执行特定操作,那么我们可以考虑针对该操作进行优化。
猜你喜欢
  • 1970-01-01
  • 2019-10-20
  • 2022-01-25
  • 1970-01-01
  • 2016-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多