通过仅将4个立方体移动到架子的末端来对架子上的立方体进行分类

时间:2015-11-02 17:46:49

标签: algorithm sorting

我遇到以下问题。

架子上有彩色的立方体。

每个多维数据集可以是C - CyanM - MagentaY - YellowK - blacK。有一个机器人必须按照给定的顺序对所有立方体进行排序:从左侧看,必须按顺序从C到K的颜色。例如CCCCMMMYKKKKK。机器人只能将四个相邻的立方体放在架子的右端。然后它将所有内容都移到左边以填补空白。

我不知道怎么做:/

任何建议都会非常棒

2 个答案:

答案 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个点。