\begingroup

考虑曼哈顿距离的传统定义;在网格(上、下、左、右)上行进的两个点之间的最短距离。例如,点 (0,0) 和 (2,2) 之间的曼哈顿距离为 4。

在某些单元格中放置 1-6 之间的数字,以满足以下条件:

  1. 每个单元格最多包含一个数字。单元格可以留空。
  2. 对于网格中包含数字N的每个单元格,恰好有另外两个包含N的单元格的曼哈顿距离为N
  3. 对于网格中包含数字N的每个单元格,没有其他包含N的单元格的曼哈顿距离小于N

\endgroup

1

  • \begingroup

    \endgroup


    – 


最佳答案
2

\begingroup

起点是:

带有 6。给定的 6 不能与距离小于 6 的其他 6 一起放置,这样只剩下四个候选:

我们必须在这四个单元格中放置两个 6,它们之间的距离必须至少为 6。这迫使:

现在让我们放置:

距离最左边的给定 5 有 5 个 5。距离此 5 有 5 个未占用的单元格,其中两个单元格与其他 5 的距离小于 5。因此,我们可以放置这些 5:
请注意,这四个 5 现在各自都有两个相距 5 个的 5,并且没有更近的 5,所以我们不需要添加更多的 5。

顺着链条往下看:

让我们看一下 4,特别是距离最右列 4 距离为 4 的单元格:
底行的 4 距离右列的 4 已经是 4 了。绿色单元格距离底部的 4 是 2,而紫色、黄色和蓝色单元格距离网格中已有的所有三个 4 都是 4,所以它们也不能是 4。因此红色单元格必须是 4。

左上角的 4 和底行的 4 各自都需要另一个邻居,因此让我们将左上角的候选邻居涂成蓝色,底行的候选邻居涂成黄色,两者的候选邻居涂成绿色。

因此,空白的黄色离其他 4 太近了,最上面的绿色也是如此。第 3 行和第 4 行的绿色离三个 4 已经是 4 了。如果我们不在第 5 行的绿色单元格中放置 4,那么我们必须在剩下的蓝色和黄色单元格中放置 4,这会太靠近了。因此第 5 行的绿色单元格必定是 4,并且现在所有 4 都有两个距离为 4 的邻居。

接下来是:

距离左列 3 处只有两个未填充的单元格,因此两个都是 3:
现在距离第 1 行 3 处必须有另一个 3,而该位置有四个候选。两个离其下方的 3 太近,而第 1 行中已经有 3 个相邻的 3,距离为 3。因此,顶行中剩余的空白单元格是 3,现在有两个相邻的 3。对于第 7 列中的 3,距离 3 处的另一个 3 只有三个可能的位置,而第 2 行和第 3 行中的两个离我们刚刚放置的 3 太近。因此,第 4 行第 6 列必须是 3,并且所有 3 都已放置:

你猜对了:

让我们来处理 2。第 5 行中的 2 需要两个 2 邻居,并且只有两种可能性:R3C2 和 R5C4。现在满足 R2C3 会迫使 R2C5 和 R3C6 为 2。R5C4 需要另一个邻居,必须是 R6C5,这迫使 R6C7,这迫使 R4C7。这结束了链,因为 R4C7 与 R3C6 和 R6C7 的距离都是 2。

完成:

我们把中间的 1 补齐:

\endgroup

\begingroup

因为有人抢先了一步,所以我就不贴出解决方法了,只贴出关键的观察结果,

对于每个数字 N,将标记为 N 的单元格视为图中的节点,其中节点连接当且仅当它们相距(曼哈顿)距离 N。然后

组成

最简单的解决方法是

(大致)从较高的 N 开始,然后逐渐降低到较低的 N,

完整的解决方案是

\endgroup