用一个integer存储二阶魔方的状态
三阶魔方的最小步求解暂时还没有什么头绪,决定先做一个二阶魔方的求解程序,就算用穷举法也花不了多长时间。
在准备编程的时候想到一个有意思的问题,就是存储魔方状态的方法。
2阶的魔方是2*2*2的立方体,共8个块,6面6种颜色,每面包含4个小面。
我觉得二阶魔方所有组合状态为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月发
后来就没再想过这个问题,不过理论上应该是可解的,有机会再想想。
posted on 2012-04-24 12:05 java课程设计例子 阅读(387) 评论(1) 编辑 收藏 举报