将Diamond矩阵2D坐标转换为1D索引并返回

时间:2018-10-15 06:06:41

标签: matrix spiral

我有一个2D游戏板,可随着向板上添加图块而扩展。磁贴只能在上,下,左和右位置与现有磁贴相邻。

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

喜欢这种布局

  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,但希望使用某种语言中立的语言。

谢谢

1 个答案:

答案 0 :(得分:0)

从问题说明中我可以理解,不能保证瓷砖将在侧面均匀地填充。例如:

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

因此,我认为菱形矩阵不是最佳选择。 我建议将它们存储在哈希图中,例如实现2个字母单词的字典。 Example for a hash-map dictionary.[1] 另外,您需要更加具体地满足您的要求。就像,您是否会优先考虑时间的复杂性?还是您想要一个快速的访问时间,而不是那么在乎内存的使用。

重要提示:

另外,

  • 我们必须容纳的最大瓷砖数
  • 木板的最大宽度和高度。