自动还原魔方算法数据结构

今天看到一个有趣的问题,魔方还原问题,仔细思考了一下,关键点在于数据结构设计。
分析如下,简单设置魔方剖面图如下。
自动还原魔方算法数据结构_第1张图片

魔方的点主要分为三面相接的 角点 ,面相接的边点,面中心的基本点
基本点是固定的,魔方在变形过程中,基本点是没有办法进行改变的,图中1-1,2-2,3-3的相对位置是固定的,改变的只能是角点和边点,基于此,基本位置衡量必须基于基本点
自动还原魔方算法数据结构_第2张图片

根据基本点,设置边点编号如下图,相同编号表示为同一边块
自动还原魔方算法数据结构_第3张图片
设置角点编号如下图,相同编号表示为同一角块
自动还原魔方算法数据结构_第4张图片

根据上图不难看出,不论边块还是角块位置,只需要四面就可以确定全部边块及角块位置,因此设置最小确定点如图
自动还原魔方算法数据结构_第5张图片

此间需要确定一点,魔方不论如何变换,其角块对于基本点相对位置是对应的,不可能出点所以基本点按照正确位置排列,但具体色块颜色位置出现问题

基于此,我们设置魔方基本变换方法两种,边点变换和角点变换
自动还原魔方算法数据结构_第6张图片

角点变换不存在什么问题,但是边点变换存在基本点变换的问题,由于我们设置基本数据结构基于基本点,因此基本点不能进行变换,故

边点变换=左角变换+右角变换

根据最小确定点,可以设置数据结构为一维数组或二维数组。
根据基本变换方法,可以设置基本方法如下(不涉及基本点变换)
Method turnRightClockwise()
Method turnRightAnit()
Method turnLeftClockwise()
Method turnLeftAnit()
Method turnTopClockwise()
Method turnTopAnit()
Method turnTBottomClockwise()
Method turnTBottomAnit()
Method turnOutsideClockwise()
Method turnInsideClockwise()
设置扩展方法如下(涉及基本点变换,转化为基本方法)
Method turnTransverseClockwise()中心横向顺时针
Method turnTransverseAnit()中心横向逆时针
Method turnLongitudinalClockwise()中心纵向顺时针
Method turnLongitudinalAnit()中心纵向逆时针

可以设置值栈进行路径探索,接下来就是路径搜索问题,之后附上代码。

你可能感兴趣的:(算法,数据结构,算法,魔方,魔方还原)