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

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

魔方的点主要分为三面相接的 角点 ,面相接的边点,面中心的基本点
基本点是固定的,魔方在变形过程中,基本点是没有办法进行改变的,图中1-1,2-2,3-3的相对位置是固定的,改变的只能是角点和边点,基于此,基本位置衡量必须基于基本点
基本点

根据基本点,设置边点编号如下图,相同编号表示为同一边块
边点
设置角点编号如下图,相同编号表示为同一角块
角点

根据上图不难看出,不论边块还是角块位置,只需要四面就可以确定全部边块及角块位置,因此设置最小确定点如图
最小确定点

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

基于此,我们设置魔方基本变换方法两种,边点变换和角点变换
基本变换

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

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

根据最小确定点,可以设置数据结构为一维数组或二维数组。
根据基本变换方法,可以设置基本方法如下(不涉及基本点变换)
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()中心纵向逆时针

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

  • 33
    点赞
  • 96
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值