摩天大楼是一款NxN的数字逻辑谜题,它由一个网格组成,网格的周围存在一些提示数字。游戏的目的是将网格中的每个方格都建造一座1到N层高的大楼,使得同一行列中没有相同高度的大楼出现,并且,从提示数字方向看去的可视大楼数量与提示数字相同。记住,层数高的的摩天大楼会挡住它后面的摩天大楼。下面的这个例子是一道5x5的摩天大楼谜题。我们需要根据规则,将每个方格均建立高度从1层到5层的摩天大楼...但是如何呢?
摩天大楼谜题通常存在一些提示数字为1或者N的情况。提示数字1意味着对应行或列只能看见一个最高的大厦,而提示数字N代表着对应行或列的所有大厦均可见:
提示数字1意味着,从对应方向看过去,该行或列只能看见一个最高的大厦。因此下面的例子中,最高为5层的大厦必须紧挨着提示数字1,这样它就能挡住其他的大楼。
提示数字N,在NxN的网格中,意味着从对应方向看过去,该行或列能看到所有的大厦。因此在下面的例子中,该行的5座大厦必须按照升序的方式进行排列,这样的话就没有大楼遮挡其他建筑物了。
现在我们可以继续应用基本技巧,该技巧通常可以进行直接分析进而推理出下一座大厦的位置。下面是一些应用基本技巧的例子:
当使用了起手技巧后,下一步通常是根据已建大厦以及提示数字从而建立一座或者俩座最高的大厦。让我们看下面5x5例子中的中间这一列,根据规则,从底部的提示数字4看去,玩家可以看到4座大厦,这也就意味着5层楼高的大厦必须放在红色问号所示位置。然而,顶端这一行已经包含了数字5,所以中间列的5层楼高的大厦应该放置在从上面数的第二个方格处。
有些时候我们有必要同时考虑2到3个提示数字才能决定下一个大楼的位置。让我们看一下下面例子中最顶部一行4层楼高的大厦位置。4不能填到最左边的空格中,因为该行从左边看去,至少能看到3座大厦。同样,它也不能填到最右边的方格,因为该列从上面往下看,至少能看到4座大厦。由于第二列的第二行已经包含了4层楼高的大厦,那么我们只能将4填到该行中间的位置。
有些时候某一行或者某一列中的剩余空格只能按照唯一的顺序进行填充才能符合游戏的规则。让我们看一下下面例子中最右边的这一列,2层,3层,4层以及5层的大厦还没有安排位置。不管我们设想如何安置这些大厦,我们永远只能从提示数字4中得出一个顺序,即右图所示。
有些时候,特别是当玩家已经完成了谜题的一部分之后,我们需要考虑游戏的第二条规则,即任何一行或列中均没有相同层数的大厦出现。通过应用该规则,我们可以将下面图例所示谜题中的第二行以及第四行填上4和5。然后,同样地,我们可以将4填到第三行,如右图所示。
当提示数字2所对应的行或列中,最远处也是最高的大厦,那么第二高的大厦必须紧邻提示数字2。在下面的例子中,4层高的大厦是5x5网格里第二高的大厦,而它所在列也与提示数字2对应,并且提示数字2位于最顶端,最高5层建筑位于最远处,那么这个4应该填到该列顶端的空格处。如果左侧顶角方格填其他的数字将会看到多于俩座的大厦。
当某一行或列中,所对应的提示数字为2且与之相邻的最近方格为1,那么与1相邻的方格必须建上最高的大厦。在下面的例子中,5层楼高的大厦是5x5网格中最高的建筑,我们必须将它放置在最底层的第二个方格处。如果该位置填其他的数字将会看到多于俩座的大厦。
当有一行或列所对应的提示数字为2时,我们不可能将第二高的建筑物放在其所在行或列的第二个方格处,即提示数字2所在行或列的第二个格不可能是N-1。比如下面我们将4放在第二列的第二行,如下面左图所示。无论我们将其上方空格填涂任何数字,我们都将会从上到下看到1座或者3座大厦,这与提示数字相矛盾。
至此,我们谈论的技巧都不足以解决一些困难的谜题。所以,我们需要一些高级技巧去解决那些特别的情况以及富有乐趣的逻辑挑战。有些时候,当我们解决中等或者困难的谜题时,我们需要结合多个技巧或者向前分析一到俩步。下面是一些应用高级技巧解决特别题目的例子。当你独立解决困难的岛谜题时,你或许会发现更多的适合自己的技巧:
让我们看一下下图的例子。在网格中的红色问号处,我们只可以放置3层大厦或者4层大厦,因为摆放其他高度的大厦,我们从该行右侧将会看到多于俩座的大厦,与右侧提示数字2违背。然而,如果我们将3填到这个空格处的话,那么4就必须填到该行的第一列,而该列中已经存在了4。因此,我们只能将4层大厦放置在问号所示位置。
下图是另外一道正在解的谜题。让我们分析一下中间这一列中4层大厦的摆放位置。很明显,第一行已经存在了4,那么这一列中的4不能出现在第一行。然而,该列数字5上下相邻的空格处也不能填4,因为我们必须保证从上或从下看都只能看到俩座大厦,如果这俩个空格中的任何一个空格放置4层大厦,都与该列中的提示数字2违背。这也就意味着4只能填在该列中最底下一行的空格处。
让我们看一下图中最右侧一列5层大厦的摆放位置。很明显,该列的俩头均不能放置5,因为如果第一行放5,那么我们从上往下看只能看到一座大厦,与该列的提示数字2违背,而最后一行已经存在了5,那么我们只能把5放在该列中的第二个空格或者第三个空格处。然而,如果我们将5填在第二行,我们只能根据该行的提示数字2,将4填到最左侧的空格处。但是,最左侧一列已经存在了4。因此,我们只能将5放在第三行。
让我们看一下图中最右侧一列的第二个空格处应该放置几层大厦。由于4层和5层已经存在了其所在行列,所以该空格只能填1层2层或3层。如果我们试着将1放在该处,那么无论我们怎么放置其他的大厦,该行从右向左看都无法看到3座大厦。另外,如果我们试着将3放在该处,我们就必须将4放置在该列的顶端,这就与右上角的提示数字3违背。因此我们只能将2填在该处。
让我们看一下图中所示的第五行。由于该行最右侧的提示数字4,我们只能将1或2填到该行右边俩个空格处。这样最中间一个空格只能填上3,4,5。如果我们将其填3的话,该列已经存在了数字3,与之违背;如果我们将其填5的话,该行从右向左看将不会看到4座大厦。因此该空格只能填4。
让我们看一下图中最右侧一列。该列的第三个空格处只能放置1层或2层的大厦,如果放置其他的大厦,将与右侧的提示数字4相违背。这就意味着,该列的头俩行只能放置4层或5层的大厦。又因为,如果我们将4放在顶端,那么该列从下往上看将最多看到3座大厦,与该列底端的提示数字4相违背。因此我们只能将5放在顶端,将4放在其下。