用一个integer存储二阶魔方的状态

三阶魔方的最小步求解暂时还没有什么头绪,决定先做一个二阶魔方的求解程序,就算用穷举法也花不了多长时间。

在准备编程的时候想到一个有意思的问题,就是存储魔方状态的方法。

2阶的魔方是2*2*2的立方体,共8个块,6面6种颜色,每面包含4个小面。

用一个integer存储二阶魔方的状态_第1张图片

 

我觉得二阶魔方所有组合状态为264539520,也就是说用一个整型(Delphi中的integer,VB里面的long)应该能将魔方状态描述出来,想了半天还没想到满足我要求的方案。

方案1:

用数字表示每一面的颜色,6种颜色需要3个bit,每面4个颜色,6个面共要24个颜色,那么需要的存储空间是3*4*6=72bit,远大于4个字节(32bit)。

方案2:

给每个原始的方块一个编号,共8个编号,然后要描述这个方块现在所在的位置(共八个)需要3bit,描述这个角块在这个位置上的朝向(共三种朝向)需要2个bit,这样8个块共需要5*8=40bit,还多了一个字节。

方案3:

给每个原始的方块一个编号,共8个编号,每个方块有一个原始的三个面朝向,比如假定红黄蓝这个角块的红色方向为X,黄色方向为Y,蓝色方向为Z,然后要描述这个方块现在的各面朝向,共有24种状态,需要5个bit,也正好满足要求。

本质上方案3和方案2是一样的,方案2是描述了一下位置,然后描述朝向。方案3只描述了每个单独小块的坐标朝向,但是由于在魔方中,当处于某个朝向的时候它就必然位于魔方的某个位置上,所以说本质上方案2和方案3是一样的。但是方案3处理每个小块旋转的时候可能更容易一些吧。


还要想办法啊。


2007年4月发

后来就没再想过这个问题,不过理论上应该是可解的,有机会再想想。

你可能感兴趣的:(编程,Integer,存储,vb,Delphi)