5-21 2X2X2魔方问题
问题描述
2×2×2 2 × 2 × 2 魔方的构造如图所示。图中英文字母 U,L,F,R,B,D 分别表示魔方的 6 个 面中的上面,左面,前面,右面,后面,底面。魔方的每个面都可以绕其中轴旋转。给定魔 方的初始状态,可以经过若干次旋转将魔方变换成每个面都只有一种颜色的状态。绕中轴将 一个面旋转 90 度算作一次旋转。试设计一个算法计算出从初始状态到目标状态(每个面都 只有一种颜色的状态)所需的最少旋转次数。
设计一个算法,对于给定的 2×2×2 2 × 2 × 2 魔方的初始状态,计算从初始状态到目标状态(每个面都只有一种颜色的状态)所需的最少旋转次数。
数据输入:
2×2×2 2 × 2 × 2 魔方目标状态的每个面都有一种颜色,分别用大写英文字母 W,O,G,R,Y,B 来表示。将 6 个面展开并编号如下图所示。文件将给定魔 方的初始状态的 6 个面,按照其编号依次排列,共有 12 行,每行有 2 个表示方块颜色的大 写英文字母。
Java
package Chapter5HuiSuFa;
import java.util.Arrays;
import java.util.Scanner;
public class MoFang2x2x2 {
private static class cubeT{
int[] cube = new int[8];
}
private static char[] lcols = {
'U','U','U','U','L','L','L','L','F','F','F','F','R','R','R','R','B','B','B','B','D','D','D','D'};
private static final int ID = 0;
private static final int FACE_U_CW = 1;
private static final int FACE_U_CCW = 2;
private static final int FACE_U_180 = 3;
private static final int FACE_L_CW = 4;
private static final int FACE_L_CCW = 5;
private static final int FACE_L_180 = 6;
private static final int FACE_F_CW = 7;
private static final int FACE_F_CCW = 8;
private static final int FACE_F_180 = 9;
private static final int CORNER_0_CW = 10;
private static final int CORNER_0_CCW = 11;
private static final int CORNER_2_CW = 12;