魔方算法

合集下载

三阶魔方还原公式速成教程

三阶魔方还原公式速成教程

三阶魔方还原公式速成教程步骤1:还原白色十字首先,将魔方底面做好,使得中心块和底面块颜色相同。

然后,找到四个白色边块中与底面块相邻的边块,将它们旋转至正确的位置。

这样就完成了白色十字。

步骤2:完成底面两层将中间层和底面层与顶层分开考虑,将其还原为两层。

首先,将底面角块都安放在底面层的正确位置。

然后,观察底面棱块的颜色,找到它们在魔方中的位置,并按照相应的公式将其放在正确的位置。

步骤3:还原顶面十字将魔方上层角块都放在正确的位置上,使得顶面成为一个十字形。

这一步需要用到以下两个公式:公式1:FRUR'U'F'(将顶层角块旋转到正确的位置上)公式2:RUR'URU2R'(将顶层棱块旋转到正确的位置上)通过交替使用以上两个公式,最终可以完成顶面十字。

步骤4:还原顶面角块将顶层四个棱块都放在正确的位置上,然后按照以下公式将顶层角块放在正确的位置,同时不破坏其他已还原的部分:公式3:RUR'U'R'FR2U'R'U'RUR'F'(将顶层角块旋转到正确的位置上,并不破坏其他已还原的部分)重复使用公式3,直到所有顶层角块都还原到正确的位置。

步骤5:还原顶面棱块将顶层棱块都放在正确的位置上,同时不破坏其他已还原的部分。

这一步需要使用以下公式:公式4:RUR'U'R'FRF'(将顶层棱块旋转到正确的位置上,并不破坏其他已还原的部分)通过交替使用公式4,最终可以完成顶层棱块的还原。

步骤6:调整顶面角块此时,虽然魔方的顶面已经还原完毕,但是角块的朝向可能不正确。

为了调整顶面角块的朝向,可以使用以下公式,每次将一个角块放到底面,然后将其放回正确的位置:公式5:FRUR'U'F'(将一个顶层角块放到底层,然后再放回顶层)重复使用公式5,直到所有顶面角块的朝向都正确。

魔方阵算法及C语言实现

魔方阵算法及C语言实现

魔方阵算法及C语言实现1 魔方阵概念魔方阵是指由1,2,3……n2填充的,每一行、每一列、对角线之和均相等的方阵,阶数n = 3,4,5…。

魔方阵也称为幻方阵。

例如三阶魔方阵为:魔方阵有什么的规律呢?魔方阵分为奇幻方和偶幻方。

而偶幻方又分为是4的倍数(如4,8,12……)和不是4的倍数(如6,10,14……)两种。

下面分别进行介绍。

2 奇魔方的算法2.1 奇魔方的规律与算法奇魔方(阶数n = 2 * m + 1,m =1,2,3……)规律如下:1.数字1位于方阵中的第一行中间一列;2.数字a(1 < a ≤ n2)所在行数比a-1行数少1,若a-1的行数为1,则a的行数为n;3.数字a(1 < a ≤ n2)所在列数比a-1列数大1,若a-1的列数为n,则a的列数为1;4.如果a-1是n的倍数,则a(1 < a ≤ n2)的行数比a-1行数大1,列数与a-1相同。

2.2 奇魔方算法的C语言实现1 #include <stdio.h> 2// Author: / 3// N为魔方阶数 4#define N 115 6int main()7{8int a[N][N]; 9int i;10 int col,row;1112 col = (N-1)/2;13 row = 0;1415a[row][col] = 1;1617for(i = 2; i <= N*N; i++)18 {19if((i-1)%N == 0 )20 {21 row++;22 }23else24 {25// if row = 0, then row = N-1, or row = row - 126 row--;27 row = (row+N)%N;2829// if col = N, then col = 0, or col = col + 130 col ++;31 col %= N;32 }33 a[row][col] = i;34 }35for(row = 0;row<N;row++)36 {37for(col = 0;col < N; col ++)38{39 printf("%6d",a[row][col]);40 }41printf("\n");42 }43return0;44 }3 偶魔方的算法偶魔方的情况比较特殊,分为阶数n = 4 * m(m =1,2,3……)的情况和阶数n = 4 * m + 2(m = 1,2,3……)情况两种。

二阶魔方公式

二阶魔方公式

二阶魔方公式魔方是一种受欢迎的益智玩具,由于其独特的结构和困难的转动方式,备受挑战和喜爱。

魔方有不同的阶数,从3阶到7阶,每个阶数都有其独特的解法和算法。

在本文中,我们将重点介绍二阶魔方的公式和解法。

二阶魔方,也被称为迷你魔方或口袋魔方,是一种由4个面和8个小块组成的魔方。

与标准的3阶魔方相比,二阶魔方的规模较小,转动方式也更加简单。

虽然它只有两层而不是三层,但解决它的方法和步骤并不简单。

在解决二阶魔方时,我们可以使用一些基本的公式和算法来完成。

下面是一些常用的二阶魔方公式:1. 底层转动公式:- R:顺时针转动右面- R':逆时针转动右面- L:顺时针转动左面- L':逆时针转动左面- U:顺时针转动上面- U':逆时针转动上面- D:顺时针转动底面- D':逆时针转动底面2. 顶层转动公式:- F:顺时针转动前面- F':逆时针转动前面- B:顺时针转动后面- B':逆时针转动后面这些公式可以用于完成魔方的转动,但是在解决二阶魔方时,需要特别注意一些技巧和步骤。

解决二阶魔方的一般步骤如下:1. 解决底层角块:- 首先,找到一个未组装好的角块,并将其放置在魔方前面的底层。

- 然后,使用公式 R,R',L,L' 来旋转底层,将角块正确归位。

2. 解决底层棱块:- 找到一个未组装好的棱块,并将其放置在魔方前面的底层。

- 使用公式 R,R',L,L' 来旋转底层,将棱块正确归位。

3. 建立顶层十字:- 找到任意一块和中心块颜色相同的棱块,并将其放置在顶层。

- 使用公式 U 和 F/F' 来旋转顶层和前面,建立十字形。

4. 完成顶层面:- 找到一个未归位的角块,将其放置在顶层,使其颜色与相邻面颜色匹配。

- 使用公式 R,R',L,L',U 和 F/F' 来旋转顶层和前面,将角块归位。

5. 归位顶层棱块:- 找到一个未归位的棱块,将其放置在顶层,使其颜色与相邻面颜色匹配。

四列魔方还原公式

四列魔方还原公式

四列魔方还原公式四列魔方是魔方的一种,它有4个面,每个面有4个色块。

为了还原四列魔方,我们需要学习一些公式和算法。

以下是四列魔方还原的公式,详细地介绍了每个步骤和解决方法。

第一步:底层十字还原首先,我们需要将底层的四个边缘块组成一个十字。

将魔方底部的中心块转到顶层,找到和它所连接的边缘块的颜色。

然后转动顶层将该边缘块移到底层。

重复此步骤,直到十字完全组合。

第二步:底层棱块还原接下来,我们要将底层的边缘块还原到原来的位置。

首先,找到一个底层边缘块的配对块。

将配对块放到底层对应位置的一侧,并执行公式RUR'。

重复此步骤,直到底层的边缘块全部还原。

第三步:底层角块还原在这一步中,我们要还原底层的角块。

首先找到一个角块,并将其移到对应位置的一侧。

然后执行公式URU'L'UR'U'L,直到所有的底层角块还原完毕。

第四步:中间边块还原(第一层)接下来,我们要还原四列魔方的中间边块。

首先,将中间边块放在与它相对的位置并执行公式RUR'U'RUR',直到所有的中间边块还原完毕。

第五步:中间边块还原(第二层)在这一步中,我们要还原四列魔方的第二层的中间边块。

找到一个不在正确位置的中间边块,并将其移至正确位置的一侧。

然后执行公式URU'R'U'F'UF,直到所有的中间边块还原完毕。

第六步:顶层十字还原现在,我们要还原顶层的十字。

找到一个顶层边缘块的配对块,并将其移到顶层对应位置的一侧。

然后执行公式FRUR'U'F',直到顶层的十字完全还原。

第七步:顶层面块还原接下来,我们要还原顶层的面块。

找到一个顶层的角块,并将其移动到底层。

然后执行公式R'FRF',将顶层的角块还原到正确位置。

第八步:顶层边块还原在这一步中,我们要还原顶层的边块。

找到一个顶层边块,并将其移到顶层对应位置的一侧。

然后执行公式RUR'U'R'FRF',直到所有的顶层边块还原完毕。

三阶魔方顶层公式

三阶魔方顶层公式

三阶魔方顶层公式三阶魔方是一种经典的智力游戏,也是许多人喜欢的挑战。

为了解决这个谜题,人们创造了各种公式和算法来帮助他们更好地完成魔方。

本文将介绍一些顶层公式,这些公式可以用于解决魔方的顶层。

魔方是由27个立方体块组成的,分为三层:顶层、中层和底层。

其中,顶层的目标是使它的颜色相匹配。

当所有的顶层块的颜色相匹配时,即可完成魔方。

在解决魔方的过程中,我们通常先解决底层,再解决中层,最后再解决顶层。

解决顶层的基本步骤分为两个阶段:先解决顶角块,再解决顶棱块。

下面将介绍一些在顶层解决过程中常用的公式。

一、解决顶角块1.Ua:将顶面逆时针旋转90度,这个公式用于调整角块。

2.Ub:将顶面顺时针旋转90度,这个公式用于调整角块。

3.Ra:将右面逆时针旋转90度,这个公式用于调整角块。

4.Rb:将右面顺时针旋转90度,这个公式用于调整角块。

5.Fa:将前面逆时针旋转90度,这个公式用于调整角块。

6.Fb:将前面顺时针旋转90度,这个公式用于调整角块。

以上公式的选择取决于需要调整的顶角块的位置和方向,根据实际情况选择相应的公式进行操作。

二、解决顶棱块在解决顶棱块的过程中,我们需要注意两个方面:顶棱块的位置以及顶棱块的方向。

下面是一些常用的公式。

1.U:将顶面顺时针旋转90度,这个公式用于将一个顶棱块从底层移至顶层。

2.Ui:将顶面逆时针旋转90度,这个公式用于将一个顶棱块从底层移至顶层。

3.RUR'U':这是一个组合公式,用于调整顶棱块的方向。

4.URU'R':这是一个组合公式,用于调整顶棱块的位置。

根据实际情况,我们可以结合使用以上公式来解决顶层的顶角块和顶棱块。

需要注意的是,在解决顶层时,可能会出现一些不规范的情况,比如一些顶角块可能会置换位置,或者一些顶棱块可能会置换位置,这时我们可以使用以下两个公式进行调整:1.URU'L'UR'U'L:这个公式用于调整顶角块的位置。

魔方中的数学

魔方中的数学

魔方中的数学魔方是一种经典的智力玩具,既可以用来锻炼思维能力,又可以用来探索数学的奥秘。

在魔方中隐藏着许多有趣的数学原理和算法,下面我将为您介绍一些关于魔方中的数学知识。

一、魔方的构成和基本概念魔方由3x3x3共计27个小块组成,其中包括6个中心块、12个边块以及8个角块。

每个块均有不同的颜色,通过旋转魔方的不同面,我们可以改变各个块的位置和排列。

魔方的基本操作包括顺时针或逆时针旋转某一面90度、180度以及通过叠加多个操作完成更复杂的变换。

通过这些操作,我们可以还原被打乱的魔方,或者创造各种有趣的图案。

二、魔方的结构和对称性魔方的结构和对称性是其中一个数学原理。

观察魔方,我们可以发现,除了中心块外,魔方的每个块都有四个相邻的块。

魔方的结构满足拉格朗日定理,即任何一个排列都可以通过合法的操作还原到原始状态。

这意味着,无论我们怎样打乱魔方的状态,只要我们按照一定的规则进行操作,就一定可以还原成原来的状态。

同时,魔方还具有对称性。

通过一定的旋转操作,我们可以将魔方的一面变换到任意一面。

利用这一性质,可以减少操作的复杂度,从而更快地还原魔方。

三、数学算法在魔方中的应用在还原魔方的过程中,数学算法起着关键的作用。

其中最常用的算法是魔方的两阶段法。

首先,我们需要将魔方还原为特定的状态,即将所有的块恢复到正确的位置,并且每个面的颜色也要正确对应。

为了达到这个目标,我们可以采用康威方法,即在保持一面不变的情况下,逐步还原其他面。

其次,我们需要将魔方的每一面都旋转到正确的位置。

这一步需要运用到数学上的置换群和群论,通过对魔方进行一系列的旋转和置换操作,使得每个面都还原为正确的位置。

四、魔方中的数学挑战除了还原魔方,魔方还可以用来进行数学竞赛和挑战。

通过改变魔方的规模和难度,我们可以应用各种数学原理和算法。

例如,通过改变魔方的阶数,可以将魔方扩展到4x4x4、5x5x5甚至更高阶的情况。

对于这些高阶魔方,需要运用到更复杂的数学算法,如群论和线性代数。

二级魔方复原公式

二级魔方复原公式

二级魔方复原公式
二级魔方复原公式是一种特定的算法,可以将打乱的二阶魔方恢复到初始的状态。

以下是常用的二级魔方复原公式:
1.步骤一:底层十字
R U R' U R U2 R'
2.步骤二:底角复位
R U R' U' R U' R'
3.步骤三:中层色块
U R U' L' U R' U' L
4.步骤四:顶层十字
F R U R' U' F'
5.步骤五:顶角排序
R U R' U' R' F R F'
以上是最常用的二级魔方复原公式。

如果你希望进一步拓展,可以学习更高级的魔方复原方法,如CFOP法、Roux法等。

这些方法都是基于特定的策略和公式,可以更快速地复原魔方。

另外,你还可以自行探索新的解法,发现更多有趣的解题思路和技巧。

魔方三阶还原原理

魔方三阶还原原理

魔方三阶还原原理魔方三阶还原介绍魔方是一种经典的智力玩具,被广泛认可为巧妙的机械拼图。

而魔方三阶还原作为最基础的还原方式,是初学者必备的技能。

在本文中,我们将从浅入深地介绍魔方三阶还原的原理和方法。

原理魔方三阶还原的原理是将打乱的魔方还原为完整的、六个面都是同一颜色的状态。

魔方的结构包括六个中心块、12个边块和8个角块。

通过旋转不同的面使得块的颜色重新排列,最终使得每个面都是同一颜色。

1. 基本符号在解决魔方三阶还原时,我们通常用到下面的基本符号:•F:前面顺时针旋转一个角块•F’:前面逆时针旋转一个角块•B:后面顺时针旋转一个角块•B’:后面逆时针旋转一个角块•U:顶面顺时针旋转一个角块•U’:顶面逆时针旋转一个角块•D:底面顺时针旋转一个角块•D’:底面逆时针旋转一个角块•R:右侧面顺时针旋转一个角块•R’:右侧面逆时针旋转一个角块•L:左侧面顺时针旋转一个角块•L’:左侧面逆时针旋转一个角块2. 三阶还原的基本步骤三阶魔方的还原一般分为以下几个基本步骤:1.底面还原:先把底面还原为一个十字形,然后通过旋转角块使得底面完全还原。

2.二层还原:通过旋转相应的层使得中间的边块还原。

3.顶面还原:通过特定的公式还原顶面的角块,再通过旋转顶面边块还原顶面。

4.顶面调整:通过特定的公式调整顶面,使得顶面各个块的颜色完全一致。

3. 完整的解法算法魔方三阶的还原有多种算法可供选择,其中最著名的是弗里德里希法(CFOP法)。

CFOP法包括四个步骤:1.底面还原(Cross):形成一个十字形,并使得每个角块顶部的颜色与中心块一致。

2.F2L(First Two Layers):同时还原第二层的四个角块和四个边块,一共八个块。

3.OLL(Orientation of the Last Layer):调整顶层角块的朝向,使得顶面完全还原。

4.PLL(Permutation of the Last Layer):还原顶层边块的位置,使得整个魔方还原。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

不停的重复一个公式必然回到最开始的状态(转自小站hwt69love)看不懂的请看二楼本人写的,谢谢1,基本步骤:每个面顺时针90度称为一个基本步骤。

共6个基本步骤,一个面一个。

转180度,270度,反转。

都是他的组合。

2,公式:一组原子旋转的组合步骤。

可以是任意次基本步骤的组合。

公式所包含的基本步骤数叫做公式长度。

3,对于任何状态,都可以使用任何公式的。

对于公式而言,没有哪一个状态是特殊的。

4,一个公式所变换的所有状态必定产生一个环(不相交的圆圈)。

命题一:魔方任意旋转,状态数是有限的。

我来简单的说一说证明思路。

不用数学公式,但是简单的提提数学概念,帮助大家掌握点数学知识。

命题:一个公式所变换的所有状态必定产生一个环。

命题一:魔方任意旋转,状态数是有限的。

证明:这个命题很关键。

先用最直观的方法,对于三阶魔方有六个面,每个面有9个色块,所以共有6*9=54个色块。

54个色块的每一种排列组合对应一种魔方状态(一一对应)。

大家明白了什么叫状态吗?54的全排列记做54!=54*53*52*51*....*3*2*1。

显然这个数目是有限的。

魔方的任意旋转所产生的状态不会比这个数目大,因为我贴色块是撕下来贴的,没有限制的。

小朋友复原魔方就是这么做的。

呵呵!魔方状态空间魔方的每一个状态可以看成一个点,魔方的全部状态组成一个空间。

魔方的一个状态也可以看成图论中的一个点。

使用一个公式将魔方的一个状态转换成另一个状态,可以使用一条边连接这两个状态,在边的旁边标上这个公式的符号。

请大家想象这样的一幅图。

这个图上的点是有限的,并且是联通的,不然就无法转换到其中的一个状态去。

并且这个图是封闭的,就是状态中的任何点经过转换还在图中,也就是图都画完了。

用群论讲,就是群是封闭的。

像全部整数的集合对加法封闭,也就是任何数相加都是整数。

但是整数对于开根号运算就不是封闭的,2开2次方就不是一个整数,而且还不是一个有理数(就是不能表示成一个分数)。

命题二,魔方的全部状态空间对于任何公式都是封闭的魔方的全部状态组成的空间记做H,H是封闭的。

证明一:反证法。

如果H是不封闭的,那么必有H中的一个点经过公式转换后生成的点不在H中(如果不存在这个的点,说明H是封闭的,根据封闭的定义),但是H是指“全部状态的集合”,因此假设H不封闭是不成立的。

所以H封闭。

证明二:构造法,上面的方法还有点不太严密,如果我们有个方法能生成一个封闭的空间H,那么我们也证明了这个命题。

先设空间H为空集,首先增加一个初始点(六面全复原),经过一个公式变换,得到另外一个状态,如果这个状态不在集合H中,把它加入到集合H 中,依次类推,H集合的点数不断增加。

根据命题一,H集合的点数是有限的,理论上,这个过程是可以完结的。

而且我们已经知道点数不会超过54!。

所以最终H集合是封闭的,也就是不可能再增加新的点啦。

命题三:公式变换是一个一一映射(一一对应)关系魔方中使用一个公式将一个状态转换到另外一个状态叫做一个变换F。

注意,魔方状态空间H中,一个状态点A,经过一个变换F,转换到状态B。

可以称作从A到B的一个映射,而且这个映射是一一映射。

就是在公式F下,状态A只能变换到一个特定状态B,(不可能有两个状态,有时是B,有时是C)。

同时在公式F下,状态B也只能由状态A变换过来,不可能从其他的状态转换过来,否则就不是一一对应啦!简单的说,在公式F(或称变换F)下,一个图H(空间H对应的图,我们就不区分了),一个图H中的点“有且只有”两条边,一个入边,一个出边(可以用有向图来描述)。

命题四、一个公式所有变换的点必定在H中画一个圈命题四、一个公式所有变换的点必定在H中画一个圈,并且这个圈不相交。

可以使用拓扑变换变换成一个圆形。

证明:构造法,设H为魔方空间全部点的集合,H…为变换经历过的全部点的集合,从H中任意一点起(设为A点),先将这一点加入H'中,使用公式F变换,得到下一个点(B),这个点要么在H‟中,要么不在,如果不在,就将变换后的点(B)加入H…中。

最后会得到封闭的空间H',也就是再怎么变换,新点也出不了H'。

现在需要证明H'中的全部点加上变换路径形成一个圆圈。

由于变换可以无限下去,但是空间H'是有限的,所以必定会形成一个死循环,即一个圈。

有没有可能形成一个6字行的图案,还有8字形的图案呢?这是一个重大问题,但是根据刚才讨论的变换所具有的一一对应,一一映射的性质,除了圆圈外,其他的图案无法形成,这个很直观。

一一对应的图论的解释是,任何点都有两个边,一个入边,一个出边。

又要希望形成循环,只有圆圈这样简单的图样了。

6,8,9以及更复杂的图样中,必定有一个点有2个以上的边。

构造法解释:H‟从空集开始构造,首先加入一个原点A,这时对应的图是一个点A,经过一个变换F,如果变换后的点B不在集合H'中,加入点B,这时候后“图”是一个AB线段,再加入一个新点,“图”是ABC组成的线(不相交,可以拉直成直线),任何加入的新点只是延长了线的长度而已。

最后图必须封闭,为了满足一一映射的要求,最后一次F变换必定变换到起点A上。

如果变换到其他点上,如D点上,那么F的逆变换就有两个,一个逆变换到最后一点,一个逆变换到C点(D的前一点),这与变换的性质不符合。

如果还不明白,请复习一一对应,变换,逆变换(一个公式只有一个反向变换公式)。

总结:现在比较圆满的证明了一个公式可以在魔方状态空间H中形成一个圈需要注意两点:一个是魔方状态空间H是有限的,一个是变换是一一映射的性质。

#include<conio.h>#include<stdio.h>#include<stdlib.h>#include<graphics.h>int a[3][3]={1,1,1,1,1,1,1,1,1};int b[3][3]={2,2,2,2,2,2,2,2,2};int c[3][3]={4,4,4,4,4,4,4,4,4};int d[3][3]={3,3,3,3,3,3,3,3,3};int e[3][3]={5,5,5,5,5,5,5,5,5};int f[3][3]={7,7,7,7,7,7,7,7,7};int top[3][3],front[3][3],side[3][3];int position=0,temp[3]={0,0,0},new[3][3];int sign;main(){int l=60,x=50,y=50,key,count,input=0,errorcode; int a1[3][3]={1,1,1,1,1,1,1,1,1};int b1[3][3]={2,2,2,2,2,2,2,2,2};int c1[3][3]={4,4,4,4,4,4,4,4,4};int d1[3][3]={3,3,3,3,3,3,3,3,3};int e1[3][3]={5,5,5,5,5,5,5,5,5};int f1[3][3]={7,7,7,7,7,7,7,7,7};int graphdriver=VGA,graphmode=VGAHI;initgraph(&graphdriver,&graphmode,"");errorcode = graphresult();if (errorcode != grOk){printf("Graphics error: %s\n", grapherrormsg(errorcode)); printf("Press any key to exit:");getch();exit(1);}drawing(x,y,l);drawing(x+400,y,l/2);do{sign=position%3; copy (&a,&top);copy (&b,&front);copy (&c,&side);color(x,y,l); copy (&e,&top);change2(&top,1);copy (&f,&front);change2(&front,2);copy (&d,&side);color(x+400,y,l/2); setcolor(14);arrow(x,y,l);key=bioskey(0); switch(key){case 283:printf("Esc"); goto end;case 20480:setcolor(0);arrow(x,y,l);if(position==8)position=0;elseposition=position+1;break; case 18432:setcolor(0);arrow(x,y,l);if(position==0)position=8;elseposition=position-1;break;case 19712:input=1;break;case 19200:input=3;break;case 7181: setcolor(0);arrow(x,y,l);copy(&a1,&a);copy(&b1,&b);copy(&c1,&c);copy(&d1,&d);copy(&e1,&e);copy(&f1,&f);position=0;break;case 14624:setcolor(0);arrow(x,y,l);randomize();position=random(9);input=1;break;}if(input!=0) {for(count=0;count<input;count++){if(position/3==0) {change2(&b,1);change2(&c,1);change2(&d,3);change2(&f,1);change1(&b,&c);change1(&c,&d);change1(&d,&f);change1(&f,&b);change2(&b,3);change2(&c,3);change2(&d,1);change2(&f,3);temp[0]=0;temp[1]=0;temp[2]=0; if(position%3==0)change2(&a,1);if(position%3==2)change2(&e,1);}if(position/3==1) {change1(&a,&b);change1(&b,&e);change1(&e,&d);change1(&d,&a);temp[0]=0;temp[1]=0;temp[2]=0;if(position%3==0)change2(&f,1);if(position%3==2)change2(&c,1);}if(position/3==2) {change2(&a,3);change2(&e,1);change2(&f,2);change1(&a,&c);change1(&c,&e);change1(&e,&f);change1(&f,&a);change2(&a,1);change2(&e,3);change2(&f,2);temp[0]=0;temp[1]=0;temp[2]=0;if(position%3==0)change2(&b,1);if(position%3==2)change2(&d,1);}}input=0;}}while(1);end:clearviewport();}drawing(int inital_x,int inital_y,int lenth) {setlinestyle(0,0,3);line(inital_x+1.5*lenth,inital_y+0,inital_x+4.5*lenth,inital_y+0);line(inital_x+1.0*lenth,inital_y+0.5*lenth,inital_x+4.0*lenth,inital_y+0.5*lenth); line(inital_x+0.5*lenth,inital_y+1*lenth,inital_x+3.5*lenth,inital_y+1*lenth); line(inital_x+0,inital_y+1.5*lenth,inital_x+3*lenth,inital_y+1.5*lenth);line(inital_x+0,inital_y+2.5*lenth,inital_x+3*lenth,inital_y+2.5*lenth);line(inital_x+0,inital_y+3.5*lenth,inital_x+3*lenth,inital_y+3.5*lenth);line(inital_x+0,inital_y+4.5*lenth,inital_x+3*lenth,inital_y+4.5*lenth);line(inital_x+0,inital_y+1.5*lenth,inital_x+0,inital_y+4.5*lenth);line(inital_x+1.0*lenth,inital_y+1.5*lenth,inital_x+1.0*lenth,inital_y+4.5*lenth); line(inital_x+2.0*lenth,inital_y+1.5*lenth,inital_x+2.0*lenth,inital_y+4.5*lenth); line(inital_x+3.0*lenth,inital_y+1.5*lenth,inital_x+3.0*lenth,inital_y+4.5*lenth); line(inital_x+3.5*lenth,inital_y+1.0*lenth,inital_x+3.5*lenth,inital_y+4.0*lenth); line(inital_x+4.0*lenth,inital_y+0.5*lenth,inital_x+4.0*lenth,inital_y+3.5*lenth); line(inital_x+4.5*lenth,inital_y+0,inital_x+4.5*lenth,inital_y+3.0*lenth);line(inital_x+1.5*lenth,inital_y+0,inital_x+0,inital_y+1.5*lenth);line(inital_x+2.5*lenth,inital_y+0,inital_x+1.0*lenth,inital_y+1.5*lenth);line(inital_x+3.5*lenth,inital_y+0,inital_x+2.0*lenth,inital_y+1.5*lenth);line(inital_x+4.5*lenth,inital_y+0,inital_x+3.0*lenth,inital_y+1.5*lenth);line(inital_x+4.5*lenth,inital_y+1.0*lenth,inital_x+3.0*lenth,inital_y+2.5*lenth); line(inital_x+4.5*lenth,inital_y+2.0*lenth,inital_x+3.0*lenth,inital_y+3.5*lenth); line(inital_x+4.5*lenth,inital_y+3.0*lenth,inital_x+3.0*lenth,inital_y+4.5*lenth); }color(int inital_x,int inital_y,int lenth){int i,j;int color_num;int x1=inital_x+1.5*lenth;int y1=inital_y+0.25*lenth;int x2,y2;for (i=0;i<3;i++){x2=x1;y2=y1;for (j=0;j<3;j++){color_num=top[i][j]; setfillstyle(1,color_num); floodfill(x2,y2,WHITE); x2=x2+lenth;}x1=x1-0.5*lenth;y1=y1+0.5*lenth;}x1=inital_x+0.5*lenth; y1=inital_y+2*lenth;for (i=0;i<3;i++){x2=x1;y2=y1;for (j=0;j<3;j++){color_num=front[i][j]; setfillstyle(1,color_num); floodfill(x2,y2,WHITE); x2=x2+lenth;}y1=y1+lenth;}x1=inital_x+3.25*lenth; y1=inital_y+2*lenth;for (i=0;i<3;i++){x2=x1;y2=y1;for (j=0;j<3;j++){color_num=side[i][j];setfillstyle(1,color_num);floodfill(x2,y2,WHITE);x2=x2+0.5*lenth;y2=y2-0.5*lenth;}y1=y1+lenth;}}arrow(int inital_x,int inital_y,int lenth){if(position<=2){line(inital_x-30,inital_y+2*lenth-3+position*lenth,inital_x-20,inital_y+2*lenth-3+position*lenth); line(inital_x-30,inital_y+2*lenth+3+position*lenth,inital_x-20,inital_y+2*lenth+3+position*lenth );line(inital_x-21,inital_y+2*lenth-6+position*lenth,inital_x-15,inital_y+2*lenth+position*lenth); line(inital_x-21,inital_y+2*lenth+6+position*lenth,inital_x-15,inital_y+2*lenth+position*lenth); }if(position<=5&&position>2){line(inital_x+0.5*lenth+(position-3)*lenth-3,inital_y+4.5*lenth+30,inital_x+0.5*lenth+(position-3)*lenth-3,inital_y+4.5*lenth+20);line(inital_x+0.5*lenth+(position-3)*lenth+3,inital_y+4.5*lenth+30,inital_x+0.5*lenth+(position-3)*lenth+3,inital_y+4.5*lenth+20);line(inital_x+0.5*lenth+(position-3)*lenth-6,inital_y+4.5*lenth+21,inital_x+0.5*lenth+(position-3)*lenth,inital_y+4.5*lenth+15);line(inital_x+0.5*lenth+(position-3)*lenth+6,inital_y+4.5*lenth+21,inital_x+0.5*lenth+(position-3)*lenth,inital_y+4.5*lenth+15);}if(position>5){line(inital_x+3.25*lenth+(position-6)*lenth*0.5-3+5,inital_y+4.5*lenth+30-(position-5)*0.5*lent h+20,inital_x+3.25*lenth+(position-6)*0.5*lenth-3+5,inital_y+4.5*lenth+20-(position-5)*0.5*len th+20);line(inital_x+3.25*lenth+(position-6)*lenth*0.5+3+5,inital_y+4.5*lenth+30-(position-5)*0.5*lent h+20,inital_x+3.25*lenth+(position-6)*0.5*lenth+3+5,inital_y+4.5*lenth+20-(position-5)*0.5*le nth+20);line(inital_x+3.25*lenth+(position-6)*lenth*0.5-6+5,inital_y+4.5*lenth+21-(position-5)*0.5*lent h+20,inital_x+3.25*lenth+(position-6)*0.5*lenth+5,inital_y+4.5*lenth+15-(position-5)*0.5*lenth +20);line(inital_x+3.25*lenth+(position-6)*lenth*0.5+6+5,inital_y+4.5*lenth+21-(position-5)*0.5*lent h+20,inital_x+3.25*lenth+(position-6)*0.5*lenth+5,inital_y+4.5*lenth+15-(position-5)*0.5*lenth +20);}}copy (int *p,int *q){int i,j;for (i=0;i<3;i++){for (j=0;j<3;j++){*q=*p;q++;}}}change1(int *p,int *q) {int i,ling;p=p+sign;q=q+sign;if (temp[0]==0){for(i=0;i<3;i++){temp[i]=*p;p=p+3;}p=p-9;}for(i=0;i<3;i++){ling=*q;*q=temp[i];temp[i]=ling;p=p+3;q=q+3;}}change2(int *p,int x) {for (k=0;k<x;k++) {for(i=0;i<3;i++) {for(j=2;j>=0;j--) {new[j][i]=*p;p=p+1;}}p=p-9;for (i=0;i<3;i++) {for (j=0;j<3;j++) {*p=new[i][j];p++;}}p=p-9;}}。

相关文档
最新文档