📜  拼图 |邻居

📅  最后修改于: 2022-05-13 01:57:25.663000             🧑  作者: Mango

拼图 |邻居

Sahil 从他的朋友 Akhil 那里得到了一个挑战问题。 Sahil 必须找到所有 n 值,可以用 + 和 -(每个单元格一个)填充 n × n 表,以便每个单元格恰好有一个具有相反符号的邻居。如果两个单元格位于同一行或同一列,则它们被视为相邻单元格。你能帮助 Sahil 找到这样的 n 值吗?

解决方案 :
如果 n 是偶数,这个谜题有一个解,如果 n 是奇数,它没有解。如果 n 是偶数,则可以用加号填充顶行,用减号填充第 2 行和第 3 行,再次用加号填充第 4 和第 5 行,依此类推,直到最后一行填充加号。在此方案下,每个单元格将恰好有一个相邻单元格,其符号在相关单元格的上方或下方。当然,作为替代解决方案,您可以互换上一个解决方案中的优缺点,或者让每一列而不是每一行都包含相同的符号。例如,如果我们采用 6 x 6 表,则可能的解决方案是:

解释 :
1)。如果在左上角放置一个加号,我们必须在相邻单元格中放置一个加号和一个减号,因为每个单元格都将恰好有一个具有相反符号的邻居。
2)。考虑在其行邻居中放置加号而在其列邻居中放置减号的情况;另一种情况是对称的。
3)。因此,让我们证明,如果加号放在第 1 行的前两个单元格中,而减号放在第 2 行的第一个单元格中,我们将不得不用加号填充第 1 行的剩余单元格,并用加号填充第 2 行的剩余单元格缺点。
4)。由于第二行中的第一个单元格已经有一个上面有加号的邻居,因此第 2 行中的第二个单元格必须包含一个减号。但是,第 1 行中的第三个单元格必须包含一个加号,因为第 1 行中的第二个单元格已经有一个在其下方带有减号的邻居。
5)。根据相同的参数,第 1 行的所有剩余单元格都必须包含一个加号,第 2 行中的所有剩余单元格必须包含一个减号。
6).但是,第 3 行中的所有单元格都必须包含减号,因为它们在第 2 行中的邻居已经在第 1 行中拥有正邻居。
7)。这意味着第 3 行不能是最后一个,但必须紧跟第 4 行,并填满所有加号。第 4 行可以在最后,也可以跟在所有加号行之后,依此类推。

这证明当 n 是偶数时,这个谜题除了上面描述的没有其他解。当 n 为奇数时,它没有解。

参考资料 : 算法谜题 – Anany Levitin, Maria Levitin