检查多米诺骨牌金字塔的有效性

时间:2018-09-15 01:51:46

标签: algorithm data-structures

我在一次编码采访中遇到了这个问题,无法找到一个好的解决方案。

您将获得6个多米诺骨牌。一个多米诺骨牌有两个一半,每个斑点都有许多斑点。您正在构建3级多米诺骨牌金字塔。底层有3个多米诺骨牌,中间层有2个多米诺骨牌,顶层有1个。

这样的安排使得每个级别都位于其下面级别的中心上方。这是一个视觉效果:

         [ 3 | 4 ]
    [ 2 | 3 ] [ 4 | 5 ]
[ 1 | 2 ][ 3 | 4 ][ 5 | 6 ]

必须设置金字塔,以使每个多米诺骨牌上的一半的点数与下面的一半相同。这不适用于同一级别的相邻多米诺骨牌。

是否有可能以上述安排由6个多米诺骨牌构建金字塔?多米诺骨牌可以自由排列和旋转。

编写一个函数,该函数采用12个整数组成的数组(例如arr [0],arr [1]是第一个多米诺,arr [2],arr [3]是第二个多米诺,等等),然后返回“如果可以或不可以使用给定的6个多米诺骨牌建立金字塔,则选择“是”或“否”。

谢谢。

2 个答案:

答案 0 :(得分:1)

您可以做得比蛮横强。我没有时间完整答案。因此,这更像是一个提示。

计算每个数字的出现次数。至少两个数字应至少为3,依此类推。如果不满足这些条件,则没有解决方案。在接下来的步骤中,您需要考虑数字在磁贴上的位置。

答案 1 :(得分:0)

我们可以制定一个递归解决方案:

valid_row:
  if row_index < N - 1:
    copy of row must exist two rows below
  if row_index > 2:
    matching left and right must exist
    on the row above, around a center
    of size N - 3, together forming
    a valid_row
  if row_index == N - 1:
    additional matching below must
    exist for the last number on each side

一种解决方法是在沿路径跟踪选定的多米诺骨牌的同时回溯。考虑到匹配的限制,六个多米诺骨牌金字塔应该很快就可以投入使用。