zoukankan      html  css  js  c++  java
  • 自动还原魔方算法数据结构

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

    魔方的点主要分为三面相接的 角点 ,面相接的边点,面中心的基本点
    基本点是固定的,魔方在变形过程中,基本点是没有办法进行改变的,图中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()中心纵向逆时针

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

  • 相关阅读:
    javascript之全局函数
    讲真,MySQL索引优化看这篇文章就够了
    aws亚马逊磁盘扩展卷步骤
    google支付回调验证(备用)
    Linux TCP状态TIME_WAIT 过多的处理
    MySQL索引优化分析
    CSS使图片变模糊,亲测非常好用
    linux ss 命令用法说明
    php一行代码获取本周一,本周日,上周一,上周日,本月一日,本月最后一日,上月一日,上月最后一日日期
    有哪些你追了很多女生才明白的道理?
  • 原文地址:https://www.cnblogs.com/cunchen/p/9464180.html
Copyright © 2011-2022 走看看