把魔方的每一种状态看成图上的一个节点,每一次转动看成一条边。二阶魔方(固定左下后角)一共 3,674,160 个节点,每个节点 9 条边。从“复原”出发跑一遍 BFS,整张图的每个节点就都知道自己离终点多远,之后任何打乱都能沿着“下坡边”走回来,而且步数一定最少。
节点:一个状态 = 7 个可动角块的排列(7! = 5040 种)× 朝向(3⁶ = 729 种,第 7 块的朝向由前 6 块决定),合计 5040 × 729 = 3,674,160。每个状态被编成一个整数编号,整张图的“距离表”只占 3.6 MB。
边:U、R、F 各有顺时针、180°、逆时针三种转法,所以每个节点正好 9 条边。边是双向的(R 的反方向就是 R'),这是一张无向的 9-正则图,也就是魔方群的凯莱图。
求解:从复原节点做广度优先搜索,第 d 层就是“恰好需要 d 步”的全部状态。打开页面那一两秒,浏览器就在跑这件事。求解时站在当前节点,每次挑一条通向 d−1 层的边走,走 d 步必到终点,不可能更短。最远的一层是 11,这就是二阶魔方在这种计步方式下的“上帝之数”,那一层只有 2,644 个状态。
三阶呢?三阶有约 4.3×10¹⁹ 个节点,整张图存不下也搜不完。实际的求解器还是图论思路:Thistlethwaite / Kociemba 算法把大图按子群拆成几张能搜的小图分段走,或者用 IDA* 加模式数据库在图上做启发式搜索。三阶的上帝之数是 20。