我遇到以下问题。
架子上有彩色的立方体。
每个多维数据集可以是C - Cyan
,M - Magenta
,Y - Yellow
或K - blacK
。有一个机器人必须按照给定的顺序对所有立方体进行排序:从左侧看,必须按顺序从C到K的颜色。例如CCCCMMMYKKKKK。机器人只能将四个相邻的立方体放在架子的右端。然后它将所有内容都移到左边以填补空白。
我不知道怎么做:/
任何建议都会非常棒
答案 0 :(得分:0)
这是一个天真算法的想法 -
(示例输入CYKMMKYCCYK)
在货架上进行迭代,如果找到C,将其移到货架的末端并且不要碰到那个' C'再次。为所有人做这件事。
(此步骤后输入YKMMKYYKCCC)
在货架上进行迭代,如果你找到一个M,将它移到货架的末端并且不要触摸那个' M' M' M'再次。为所有人做这件事。
(此步骤后输入YKKYYKCCCMMM)
。 。 。重复' Y' (此步骤后输入KKKCCCMMMYYY)。 。 。
。 。 。重申' K' (此步骤后输入CCCMMMYYYKKK)。 。
这个想法是你把架子分成两个部分,"左边"部分未分类,"右"部分已排序。每次你把一封信移到最后,你都会把它移到"左边"未排序的部分到"右边"排序部分。移动所有字母后,将对货架进行分类。
这可以优化,一次移动多个字母。
答案 1 :(得分:0)
对于少量的盒子,有些情况显然无法解决:4个盒子根本无法移动,5个盒子只能旋转。有6个或更多的盒子,结果取决于输入顺序;有些组合可以解决,有些则不能。但是,只要有至少一种颜色的4个或更多的盒子,就可以解决所有输入案例。
要将一个盒子移动到某个位置,它需要位于目标点右侧的点x * 4处,因为一个盒子一次只能向左移动4个位置(将盒子移到它的左边)。要将框移动到右侧,将其移动到另外3个框,然后移除框左侧的框,直到它位于目标点;要选择要移动的其他框,请查看您正在移动的框右侧的框数:如果数字是例如x * 4 + 2,然后选择右边的1个框,左边的2个框将向右移动框x * 4 + 1个点。
要将M框移动到左侧4个位置:
CCCC的 1234 强> M56789
CCCCM567891234
将M框移动到左边3个位置(~x * 4 + 1到右边的位置):
CCCC1 23M4 56789(6 = x右侧的x * 4 + 2个方框)
CCCC 1567 8923M4(M右侧1个方框)
CCCC的 8923 强> M41567
CCCCM415678923
将M框移动到左侧2个位置(~x * 4 + 2个位置向右):
CCCC 12M3 456789(7 = M右侧x * 4 + 3个方框)
CCCC 4567 8912M3(M右侧1个方框)
CCCC的 8912 强> M34567
CCCCM345678912
将M框1位置向左移动(~x * 4 + 3位置向右):
CCCC 1M23 456789(8 = M右侧4 * x + 0个方框)
CCCC45678 91M2 3(M右侧2个方框)
CCCC 4567 8391M2(M右侧1个方框)
CCCC的 8391 强> M24567
CCCCM245678391
正如您在上一个示例中所看到的,通过将最后一个方框(3)左侧的4个方框(91M2)移动到末尾,可以将靠近货架末端的方框移动1个点。