📜  拼图 |柜台和矩形板

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

拼图 |柜台和矩形板

给定3N个计数器,其中N >= 1 ,有三种类型的计数器RedWhiteBlue ,它们的计数均相等,即N和一个3N列的矩形板充满计数器,任务是重新排列计数器,使得每列都有三种不同颜色的计数器。唯一允许的操作是交换同一行中的计数器。设计一个算法来完成这个任务或证明这样的算法不存在。

解决方案:

  1. 对于N = 1:问题很简单,因为一列的所有3 个计数器都是不同的颜色。
  2. 对于N > 1:可以通过为第一列排列3种不同颜色的计数器来解决问题,然后解决问题的较小实例。考虑第一列。有以下三种可能:
    • 所有三个计数器都是不同的颜色:在这种情况下,不需要做任何事情。
    • 正好有两个计数器的颜色相同:假设两个颜色相同的计数器是红色的,它们位于前两行,而第一行第三列的计数器是白色的,如图所示。由于棋盘上必须有N个蓝色计数器,而且第三行不能超过N-1个,这意味着前两行必须至少有一个蓝色计数器。因此,所需的算法可以扫描前两行,从第二列开始,直到遇到蓝色列;找到蓝色计数器后,应将其与第一列中的计数器交换。
    • 所有三个计数器的颜色都相同:假设第一列中的三个计数器是红色的。这意味着现在三行中的每一行现在必须包含至少一个红色以外的颜色的计数器,因此我们可以扫描任何行,以获得不同颜色的计数器并将其与获取上述情况的第一列。