123魔方、223魔方、233魔方、香蕉魔方

目录

123魔方

1,魔方三要素

2,复原方法

223魔方

1,魔方三要素

2,复原方法

3,公式推导

233魔方

1,魔方三要素

2,复原方法

3,公式推导


123魔方

1,魔方三要素

(1)组成部件

4个角块,2个棱块

(2)可执行操作

一共就三种操作。

(3)目标态

4个角块可以确定6个面的关系。

2,复原方法

按阅读顺序编号123456,即上面12中间34下面56。

以1为准,先复原3再复原4:

再复原2,如果还没复原,那也只需要朴素的一次操作即可。

223魔方

1,魔方三要素

(1)组成部件

8个角块编号0-7,4个棱块编号0-3(即默认编号

(2)可执行操作

4个操作分别是上下前右面进行顺时针旋转,编号0-3

(3)目标态

8个角块可以确定6个面。

2,复原方法

先复原下面2层,很简单。

再调整顶层棱块位置,需要1个公式。

3,公式推导

交换公式自动推导里面的代码即可。

int main()
{
	CubeBlock block1(0, 8);//8角块
	CubeBlock block2(1, 4);//4棱块
	vector<CubeBlock>b = vector<CubeBlock>{ block1,block2 };
	mans[0] = "上", mans[1] = "下", mans[2] = "前", mans[3] = "右";
	vector<vector<int>>v1 = { {3,0,1,2,4,5,6,7},{0,1,2,3} };
	vector<vector<int>>v2 = { {0,1,2,3,5,6,7,4},{0,1,2,3} };
	vector<vector<int>>v3 = { {0,1,7,6,4,5,3,2},{0,1,3,2} };
	vector<vector<int>>v4 = { {0,6,5,3,4,2,1,7},{0,2,1,3} };
	CubeOpt op1(b, v1);
	CubeOpt op2(b, v2);
	CubeOpt op3(b, v3);
	CubeOpt op4(b, v4);
	vector<CubeOpt>opts = { op1,op2,op3,op4 };
	Cube cube(b, opts);
	cube.bfs(0, 2, 2);
	return 0;
}

输出:

3 1 2 0 4 5 6 7      0上 0上 0上 2前 0上 2前 1下 1下 1下 2前 1下 2前 3右 0上 3右

这就是交换顶层左边2个角块的公式。

233魔方

1,魔方三要素

(1)组成部件

8个角块编号0-7,8个棱块编号0-7 (即默认编号

(2)可执行操作

5个操作分别是上右前左后面进行顺时针旋转,编号0-4

(3)目标态

8个角块和2个中心块可以确定6个面。

2,复原方法

先复原底层,不需要公式。

然后就只需要交换角块位置,交换棱块位置即可。

3,公式推导

利用交换公式自动推导中的代码推导公式。

(1)棱块

int main()
{
	CubeBlock block1(0, 8);//8角块
	CubeBlock block2(1, 8);//8棱块
	vector<CubeBlock>b = vector<CubeBlock>{ block1,block2 };
	mans[0] = "上", mans[1] = "右", mans[2] = "前", mans[3] = "左", mans[4] = "后";
	vector<vector<int>>v1 = { {3,0,1,2,4,5,6,7},{3,0,1,2,4,5,6,7} };
	vector<vector<int>>v2 = { {0,6,5,3,4,2,1,7},{0,5,2,3,4,1,6,7} };
	vector<vector<int>>v3 = { {0,1,7,6,4,5,3,2},{0,1,6,3,4,5,2,7} };
	vector<vector<int>>v4 = { {7,1,2,4,3,5,6,0},{0,1,2,7,4,5,6,3} };
	vector<vector<int>>v5 = { {5,4,2,3,1,0,6,7},{4,1,2,3,0,5,6,7} };
	CubeOpt op1(b, v1);
	CubeOpt op2(b, v2);
	CubeOpt op3(b, v3);
	CubeOpt op4(b, v4);
	CubeOpt op5(b, v5);
	vector<CubeOpt>opts = { op1,op2,op3 };
	Cube cube(b, opts);
	cube.bfs(1, 2, 2);
	return 0;
}

0 2 1 3 4 5 6 7      1右 0上 1右 2前 0上 0上 2前 1右 0上 0上 2前 0上 1右

就是交换顶层前面和右边2个棱块的公式。

(2)角块

和推导棱块的最终代码类似。

int main()
{
	CubeBlock block1(0, 8);//8角块
	CubeBlock block2(1, 8);//8棱块
	vector<CubeBlock>b = vector<CubeBlock>{ block1,block2 };
	mans[0] = "上", mans[1] = "右", mans[2] = "前", mans[3] = "左", mans[4] = "后";
	vector<vector<int>>v1 = { {3,0,1,2,4,5,6,7},{3,0,1,2,4,5,6,7} };
	vector<vector<int>>v2 = { {0,6,5,3,4,2,1,7},{0,5,2,3,4,1,6,7} };
	vector<vector<int>>v3 = { {0,1,7,6,4,5,3,2},{0,1,6,3,4,5,2,7} };
	vector<vector<int>>v4 = { {7,1,2,4,3,5,6,0},{0,1,2,7,4,5,6,3} };
	vector<vector<int>>v5 = { {5,4,2,3,1,0,6,7},{4,1,2,3,0,5,6,7} };
	CubeOpt op1(b, v1);
	CubeOpt op2(b, v2);
	CubeOpt op3(b, v3);
	CubeOpt op4(b, v4);
	CubeOpt op5(b, v5);
	vector<CubeOpt>opts = { op1,op2,op3 };
	Cube cube(b, opts);
	cube.bfs(0, 2, 2);
	return 0;
}

输出若干行,其中

1 0 2 3 4 5 6 7      0上 0上 2前 0上 2前 0上 1右 2前 1右 2前 0上 1右 0上 0上 0上 2前 1右 0上 2前 1右

就是交换顶层左前和右前2个角块的公式。

香蕉魔方

香蕉魔方和223魔方是同构关系,复原方法相同。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值