📜  求解魔方的算法(1)

📅  最后修改于: 2023-12-03 14:56:00.513000             🧑  作者: Mango

求解魔方的算法

魔方是一种非常具有挑战性和趣味性的拼图玩具,它由6个不同颜色的单元块组成,每个面上都有9个单元块。在玩魔方的过程中,我们需要把乱序的魔方还原成初始状态,这需要一定的技巧和算法。

基本概念

在深入研究求解魔方算法之前,我们需要先了解一些基本概念:

  • 面:魔方由6个面组成,分别是前、后、上、下、左、右。
  • 单元块:魔方的最小组成单位,每个面上有9个单元块。
  • 翻转:将魔方沿某个方向进行90度的旋转。
  • 逆时针/顺时针:翻转的方向可以逆时针或顺时针。
解决魔方的基本步骤

无论使用何种求解魔方的算法,基本步骤都是一样的:

  1. 组合相同颜色的中心块:将整个魔方转动至目标面朝上,对准其中心块的颜色进行翻转,以组合相同颜色的中心块。
  2. 解决顶部十字:将魔方转动至顶部十个块组成十字形状,然后翻转其他面的块,以确定顶部四个角块的位置。
  3. 排列顶部四个角块:将魔方转动至顶部四个角块組成一个矩形,然后通过不断的翻转,让这四个角块返回正确的位置。
  4. 排列中间的棱块:将魔方转动至中层的两个棱块呈固定方向,然后通过翻转,将其他两个棱块恰当地排列。
  5. 解决底部十字:按照既定的公式,将底部十个块排列成十字形状。
  6. 将底部棱块的颜色归位:将底部棱块的颜色与顶部对应,将棱块的四个单元块归位。
  7. 将底部角块的颜色归位:将底部角块同时排列到正确的位置。
常见求解魔方的算法
CFOP方法

CFOP方法即是从顶部十字开始,按照顺序执行步骤,最后完成魔方还原。其步骤分别为交叉(Cross)、顶面先拼角(F2L)、顶面先拼棱(OLL)和最后成型(PLL)。

下面是CFOP算法中每个步骤的详细步骤:

交叉(Cross)

  1. 将任意颜色的中心块对准前面
  2. 扫描魔方,找到与前面块接壤的有颜色的块
  3. 将这个块相对应的颜色拿到顶面
  4. 将旁边的三个棱块转出来,组成一个交叉形。

顶层先拼角(F2L)

  1. 扫描魔方,找出白色块和别的棱块的接口位置,在顶面使用公式(Ri Di R D),可以将这个块安装在第一层对应角位上。
  2. 找到接口位置,然后判断“相邻块是否是同色与相邻块角块是否是白色”,如果满足要求,则通过公式将其安装在角位上。
  3. 将第一层与顶层颜色匹配的棱块上移到顶面,这个步骤可以和第二步一起做,只要将第一层的棱块转到对应的位置即可。

顶层先拼棱(OLL)

  1. 判断魔方是否为特殊状态,如果是则直接完成。否则使用公式,这会将初始状态的不同形状的块全部变成指定的形状,就可以使用下面的公式将魔方还原。
  2. 将棱块从底部移到对应的位置。
  3. 若棱块在ERL(右上)位,使用(F R U R U F `)公式将其移到右侧位置上,否则通过逆时针旋转右侧棱块。
  4. 将左上棱块移到LUF(左上)位,右上棱块移到RUF(右上)位,这个需要经过多次的操作才能完成。

最后成型(PLL)

  1. 将2角和2棱和指定的公式进行排列,如(sexy move)移动顶层棱块。
  2. 将边沿棱块调整到RUF或RUB位置,保持这3个棱块方向一致。
  3. 移动前述3块距离为两步(U2),然后将另外3块放到合适的位置并做对应的翻转操作。
  4. 经过上述步骤,魔方就可以还原了。
逆向搜索方法

逆向搜索方法使用类似于深度优先搜索算法的方法,在已知魔方任意位置状态的基础上,使用逆向的方式,按照CFOP步骤的逆向,逆向求解魔方。

Kociemba算法

Kociemba 算法也采用了深度优先搜索算法的方法,不过相对于逆向搜索方法,Kociemba 算法顺序是确定的。Kociemba算法将求解魔方的时间从数十分钟缩短到秒级别,而且保证在最多20步内即可还原魔方。

总结

无论使用何种求解魔方的算法,都需要我们对魔方的构成模型、基本步骤和算法实现有一个清晰的了解。在掌握了基本算法之后,我们可以使用各种优化算法,如面对公式、中层换块等,让魔方还原更加高效。