三阶魔方CFOP复原的C语言算法
来源:互联网 发布:淘宝网购物婚纱 编辑:程序博客网 时间:2024/05/01 15:44
/******************************************************************//** brief: 三阶魔方CFOP四步还原 *//** C: Cross,底面十字+侧面中心块与中心块下面块颜色相同 *//** F: F2l,第一层第二层复原完成 *//** O: Oll,顶面复原 *//** P: Pll,复原完成 *//** *//** brief : 调用顺序 *//** 1.cfop_cross() *//** 2.cfop_f2l() *//** 3.cfop_oll() *//** 4.cfop_pll() *//** 5.Duang 复原完成 *//** date: 2017/3/15 *//** by: DarrylQuinn *//******************************************************************//*** breif: 魔方色块的颜色值*/typedef enum { blue=1,red,yellow,green,white,orange}Colors;/*** breif: 魔方面,为了使用方便,不使用下标0,即** 11 12 13** 21 22 23** 31 32 33*/typedef struct { Colors s[4][4];}Surface;/*** brief: 定义魔方结构体*/typedef struct { Surface up,down,front,back,left,right;}Cube;/*** brief:定义一个魔方*/Cube g_magic;/******************************************************************//*** brief: 将sur面顺时针转i次** sur: 魔方面** i: 转的次数*/void surface_clock( Surface *sur,int i ){ Surface t; for(;i>0;i--) { t=*sur; sur->s[1][1]=t.s[3][1]; sur->s[1][2]=t.s[2][1]; sur->s[1][3]=t.s[1][1]; sur->s[2][1]=t.s[3][2]; sur->s[2][3]=t.s[1][2]; sur->s[3][1]=t.s[3][3]; sur->s[3][2]=t.s[2][3]; sur->s[3][3]=t.s[1][3]; }}/*** brief: 将sur面逆时针转i次** sur: 魔方面** i: 转的次数*/void surface_anticlock( Surface *sur,int i ){ Surface t; for(;i>0;i--) { t=*sur; sur->s[1][1]=t.s[1][3]; sur->s[1][2]=t.s[2][3]; sur->s[1][3]=t.s[3][3]; sur->s[2][1]=t.s[1][2]; sur->s[2][3]=t.s[3][2]; sur->s[3][1]=t.s[1][1]; sur->s[3][2]=t.s[2][1]; sur->s[3][3]=t.s[3][1]; }}/*** brief: 将魔方的Front顺时针转i次,并将转后** 结果以数字和颜色输出到LCD** m: 魔方** i: 转的次数*/void front_clock( Cube *m,int i ){ Cube n; for(;i>0;i--) { n=*m; surface_clock(&m->front,1); m->right.s[1][1]=n.up.s[3][1]; m->right.s[2][1]=n.up.s[3][2]; m->right.s[3][1]=n.up.s[3][3]; m->down.s[1][1]=n.right.s[3][1]; m->down.s[1][2]=n.right.s[2][1]; m->down.s[1][3]=n.right.s[1][1]; m->left.s[1][3]=n.down.s[1][1]; m->left.s[2][3]=n.down.s[1][2]; m->left.s[3][3]=n.down.s[1][3]; m->up.s[3][1]=n.left.s[3][3]; m->up.s[3][2]=n.left.s[2][3]; m->up.s[3][3]=n.left.s[1][3]; }}/*** brief: 将魔方的Front逆时针转i次,并将转后** 结果以数字和颜色输出到LCD** sur: 魔方** i: 转的次数*/void front_anticlock( Cube *m,int i ){ Cube n; for(;i>0;i--) { n=*m; surface_anticlock(&m->front,1); m->right.s[1][1]=n.down.s[1][3]; m->right.s[2][1]=n.down.s[1][2]; m->right.s[3][1]=n.down.s[1][1]; m->down.s[1][1]=n.left.s[1][3]; m->down.s[1][2]=n.left.s[2][3]; m->down.s[1][3]=n.left.s[3][3]; m->left.s[1][3]=n.up.s[3][3]; m->left.s[2][3]=n.up.s[3][2]; m->left.s[3][3]=n.up.s[3][1]; m->up.s[3][1]=n.right.s[1][1]; m->up.s[3][2]=n.right.s[2][1]; m->up.s[3][3]=n.right.s[3][1]; }}/*** brief: 将魔方的Back顺时针转i次,并将转后** 结果以数字和颜色输出到LCD** sur: 魔方** i: 转的次数*/void back_clock( Cube *m,int i ){ Cube n; for(;i>0;i--) { n=*m; surface_clock(&m->back,1); m->right.s[1][3]=n.down.s[3][3]; m->right.s[2][3]=n.down.s[3][2]; m->right.s[3][3]=n.down.s[3][1]; m->down.s[3][1]=n.left.s[1][1]; m->down.s[3][2]=n.left.s[2][1]; m->down.s[3][3]=n.left.s[3][1]; m->left.s[1][1]=n.up.s[1][3]; m->left.s[2][1]=n.up.s[1][2]; m->left.s[3][1]=n.up.s[1][1]; m->up.s[1][1]=n.right.s[1][3]; m->up.s[1][2]=n.right.s[2][3]; m->up.s[1][3]=n.right.s[3][3]; } }/*** brief: 将魔方的Back逆时针转i次,并将转后** 结果以数字和颜色输出到LCD** sur: 魔方** i: 转的次数*/void back_anticlock( Cube *m,int i ){ Cube n; for(;i>0;i--) { n=*m; surface_anticlock(&m->back,1); m->right.s[1][3]=n.up.s[1][1]; m->right.s[2][3]=n.up.s[1][2]; m->right.s[3][3]=n.up.s[1][3]; m->down.s[3][1]=n.right.s[3][3]; m->down.s[3][2]=n.right.s[2][3]; m->down.s[3][3]=n.right.s[1][3]; m->left.s[1][1]=n.down.s[3][1]; m->left.s[2][1]=n.down.s[3][2]; m->left.s[3][1]=n.down.s[3][3]; m->up.s[1][1]=n.left.s[3][1]; m->up.s[1][2]=n.left.s[2][1]; m->up.s[1][3]=n.left.s[1][1]; }}/*** brief: 将魔方的Right顺时针转i次,并将转后** 结果以数字和颜色输出到LCD** sur: 魔方** i: 转的次数*/void right_clock( Cube *m,int i ){ Cube n; for(;i>0;i--) { n=*m; surface_clock(&m->right,1); m->up.s[1][3]=n.front.s[1][3]; m->up.s[2][3]=n.front.s[2][3]; m->up.s[3][3]=n.front.s[3][3]; m->front.s[1][3]=n.down.s[1][3]; m->front.s[2][3]=n.down.s[2][3]; m->front.s[3][3]=n.down.s[3][3]; m->down.s[1][3]=n.back.s[3][1]; m->down.s[2][3]=n.back.s[2][1]; m->down.s[3][3]=n.back.s[1][1]; m->back.s[3][1]=n.up.s[1][3]; m->back.s[2][1]=n.up.s[2][3]; m->back.s[1][1]=n.up.s[3][3]; }}/*** brief: 将魔方的Right逆时针转i次,并将转后** 结果以数字和颜色输出到LCD** sur: 魔方** i: 转的次数*/void right_anticlock( Cube *m,int i ){ Cube n; for(;i>0;i--) { n=*m; surface_anticlock(&m->right,1); m->up.s[1][3]=n.back.s[3][1]; m->up.s[2][3]=n.back.s[2][1]; m->up.s[3][3]=n.back.s[1][1]; m->front.s[1][3]=n.up.s[1][3]; m->front.s[2][3]=n.up.s[2][3]; m->front.s[3][3]=n.up.s[3][3]; m->down.s[1][3]=n.front.s[1][3]; m->down.s[2][3]=n.front.s[2][3]; m->down.s[3][3]=n.front.s[3][3]; m->back.s[3][1]=n.down.s[1][3]; m->back.s[2][1]=n.down.s[2][3]; m->back.s[1][1]=n.down.s[3][3]; }}/*** brief: 将魔方的Left顺时针转i次,并将转后** 结果以数字和颜色输出到LCD** sur: 魔方** i: 转的次数*/void left_clock( Cube *m,int i ){ Cube n; for(;i>0;i--) { n=*m; surface_clock(&m->left,1); m->up.s[1][1]=n.back.s[3][3]; m->up.s[2][1]=n.back.s[2][3]; m->up.s[3][1]=n.back.s[1][3]; m->back.s[1][3]=n.down.s[3][1]; m->back.s[2][3]=n.down.s[2][1]; m->back.s[3][3]=n.down.s[1][1]; m->down.s[1][1]=n.front.s[1][1]; m->down.s[2][1]=n.front.s[2][1]; m->down.s[3][1]=n.front.s[3][1]; m->front.s[1][1]=n.up.s[1][1]; m->front.s[2][1]=n.up.s[2][1]; m->front.s[3][1]=n.up.s[3][1]; }}/*** brief: 将魔方的Left逆时针转i次,并将转后** 结果以数字和颜色输出到LCD** sur: 魔方** i: 转的次数*/void left_anticlock( Cube *m,int i ){ Cube n; for(;i>0;i--) { n=*m; surface_anticlock(&m->left,1); m->up.s[1][1]=n.front.s[1][1]; m->up.s[2][1]=n.front.s[2][1]; m->up.s[3][1]=n.front.s[3][1]; m->back.s[1][3]=n.up.s[3][1]; m->back.s[2][3]=n.up.s[2][1]; m->back.s[3][3]=n.up.s[1][1]; m->down.s[1][1]=n.back.s[3][3]; m->down.s[2][1]=n.back.s[2][3]; m->down.s[3][1]=n.back.s[1][3]; m->front.s[1][1]=n.down.s[1][1]; m->front.s[2][1]=n.down.s[2][1]; m->front.s[3][1]=n.down.s[3][1]; }}/*** brief: 将魔方的Up顺时针转i次,并将转后** 结果以数字和颜色输出到LCD,之所以** 这个函数名字没有使用单字符U是因为** jpeg.c中定义了 U 变量冲突** sur: 魔方** i: 转的次数*/void up_clock( Cube *m,int i ){ Cube n; for(;i>0;i--) { n=*m; surface_clock(&m->up,1); m->front.s[1][1]=n.right.s[1][1]; m->front.s[1][2]=n.right.s[1][2]; m->front.s[1][3]=n.right.s[1][3]; m->right.s[1][1]=n.back.s[1][1]; m->right.s[1][2]=n.back.s[1][2]; m->right.s[1][3]=n.back.s[1][3]; m->back.s[1][1]=n.left.s[1][1]; m->back.s[1][2]=n.left.s[1][2]; m->back.s[1][3]=n.left.s[1][3]; m->left.s[1][1]=n.front.s[1][1]; m->left.s[1][2]=n.front.s[1][2]; m->left.s[1][3]=n.front.s[1][3]; }}/*** brief: 将魔方的Up逆时针转i次,并将转后** 结果以数字和颜色输出到LCD** sur: 魔方** i: 转的次数*/void up_anticlock( Cube *m,int i ){ Cube n; for(;i>0;i--) { n=*m; surface_anticlock(&m->up,1); m->front.s[1][1]=n.left.s[1][1]; m->front.s[1][2]=n.left.s[1][2]; m->front.s[1][3]=n.left.s[1][3]; m->right.s[1][1]=n.front.s[1][1]; m->right.s[1][2]=n.front.s[1][2]; m->right.s[1][3]=n.front.s[1][3]; m->back.s[1][1]=n.right.s[1][1]; m->back.s[1][2]=n.right.s[1][2]; m->back.s[1][3]=n.right.s[1][3]; m->left.s[1][1]=n.back.s[1][1]; m->left.s[1][2]=n.back.s[1][2]; m->left.s[1][3]=n.back.s[1][3]; }}/*** brief: 将魔方的Down顺时针转i次,并将转后** 结果以数字和颜色输出到LCD** sur: 魔方** i: 转的次数*/void down_clock(Cube *m,int i){ Cube n; for(;i>0;i--) { n=*m; surface_clock(&m->down,1); m->front.s[3][1]=n.left.s[3][1]; m->front.s[3][2]=n.left.s[3][2]; m->front.s[3][3]=n.left.s[3][3]; m->left.s[3][1]=n.back.s[3][1]; m->left.s[3][2]=n.back.s[3][2]; m->left.s[3][3]=n.back.s[3][3]; m->back.s[3][1]=n.right.s[3][1]; m->back.s[3][2]=n.right.s[3][2]; m->back.s[3][3]=n.right.s[3][3]; m->right.s[3][1]=n.front.s[3][1]; m->right.s[3][2]=n.front.s[3][2]; m->right.s[3][3]=n.front.s[3][3]; }}/*** brief: 将魔方的Down逆时针转i次,并将转后** 结果以数字和颜色输出到LCD** sur: 魔方** i: 转的次数*/void down_anticlock( Cube *m,int i ){ Cube n; for(;i>0;i--) { n=*m; surface_anticlock(&m->down,1); m->front.s[3][1]=n.right.s[3][1]; m->front.s[3][2]=n.right.s[3][2]; m->front.s[3][3]=n.right.s[3][3]; m->left.s[3][1]=n.front.s[3][1]; m->left.s[3][2]=n.front.s[3][2]; m->left.s[3][3]=n.front.s[3][3]; m->back.s[3][1]=n.left.s[3][1]; m->back.s[3][2]=n.left.s[3][2]; m->back.s[3][3]=n.left.s[3][3]; m->right.s[3][1]=n.back.s[3][1]; m->right.s[3][2]=n.back.s[3][2]; m->right.s[3][3]=n.back.s[3][3]; }}/*** brief: 将魔方的整体顺时针转i次,并将转后** 结果以数字和颜色输出到LCD(Up Down不动)** sur: 魔方** i: 转的次数*/void cube_clock( Cube *m,int i ){ u8 j,k; u8 cc[4][4]; for(;i>0;i--) { for(j=1;j<4;j++) { for(k=1;k<4;k++) { cc[j][k]=(u8)m->front.s[j][k]; } } surface_clock(&m->up,1); surface_anticlock(&m->down,1); for(j=1;j<4;j++) { for(k=1;k<4;k++) { m->front.s[j][k]=m->right.s[j][k]; } } for(j=1;j<4;j++) { for(k=1;k<4;k++) { m->right.s[j][k]=m->back.s[j][k]; } } for(j=1;j<4;j++) { for(k=1;k<4;k++) { m->back.s[j][k]=m->left.s[j][k]; } } for(j=1;j<4;j++) { for(k=1;k<4;k++) { m->left.s[j][k]=(Colors)cc[j][k]; } } }}/********************************************************************//*** brief: 处理底块在中间层侧愣的八种情况*/void cfop_downIn_mid( Cube *m ){ while ( (m->front.s[2][1] == m->down.s[2][2]) || (m->front.s[2][3] == m->down.s[2][2]) || (m->right.s[2][1] == m->down.s[2][2])|| (m->right.s[2][3] == m->down.s[2][2]) || (m->back.s[2][1] == m->down.s[2][2]) || (m->back.s[2][3] == m->down.s[2][2]) || (m->left.s[2][1] == m->down.s[2][2]) || (m->left.s[2][3] == m->down.s[2][2])) { if (m->front.s[2][1]== m->down.s[2][2]) { while (m->up.s[2][1] ==m->down.s[2][2]) up_clock(m,1); left_anticlock(m, 1); } else if (m->front.s[2][3] == m->down.s[2][2]) { while (m->up.s[2][3] == m->down.s[2][2]) up_clock(m,1); right_clock(m,1); } else if (m->right.s[2][1] == m->down.s[2][2]) { while (m->up.s[3][2] == m->down.s[2][2]) up_clock(m,1); front_anticlock(m,1); } else if (m->right.s[2][3] == m->down.s[2][2]) { while (m->up.s[1][2] == m->down.s[2][2]) up_clock(m,1); back_clock(m,1); } else if (m->back.s[2][3] == m->down.s[2][2]) { while (m->up.s[2][1] == m->down.s[2][2]) up_clock(m,1); left_clock(m,1); } else if (m->back.s[2][1] == m->down.s[2][2]) { while (m->up.s[2][3] == m->down.s[2][2]) up_clock(m,1); right_anticlock(m,1); } else if (m->left.s[2][1] == m->down.s[2][2]) { while (m->up.s[1][2] == m->down.s[2][2]) up_clock(m,1); back_anticlock(m,1); } else { while (m->up.s[3][2] == m->down.s[2][2]) up_clock(m,1); front_clock(m,1); } } }/*** breif: 底层十字+四个侧面的中心与中心下面的一块颜色相同*/void cfop_cross( Cube *cube ){ while (!(cube->front.s[2][2] == cube->front.s[3][2] && cube->back.s[2][2] == cube->back.s[3][2] && cube->left.s[2][2] == cube->left.s[3][2] && cube->right.s[2][2] == cube->right.s[3][2] && cube->down.s[2][3] == cube->down.s[2][2] && cube->down.s[2][1] == cube->down.s[2][2] && cube->down.s[3][2] == cube->down.s[2][2] && cube->down.s[1][2] == cube->down.s[2][2])) { //处理底块在侧棱的四种情况 while ((cube->front.s[1][2] == cube->down.s[2][2]) || cube->right.s[1][2] == cube->down.s[2][2] || (cube->back.s[1][2] == cube->down.s[2][2]) || (cube->left.s[1][2] == cube->down.s[2][2])) { if (cube->front.s[1][2]== cube->down.s[2][2]) { front_clock(cube,1); cfop_downIn_mid(cube); } else if (cube->right.s[1][2]==cube->down.s[2][2]) { right_clock(cube,1); cfop_downIn_mid(cube); } else if (cube->back.s[1][2] == cube->down.s[2][2]) { back_clock(cube,1); cfop_downIn_mid(cube); } else { left_clock(cube,1); cfop_downIn_mid(cube); } } //处理底块在第二层侧棱的八种情况 cfop_downIn_mid(cube); //处理底块在第三层侧棱的四种情况 while ((cube->front.s[3][2] == cube->down.s[2][2]) || (cube->right.s[3][2] == cube->down.s[2][2]) || (cube->back.s[3][2] == cube->down.s[2][2]) || (cube->left.s[3][2] == cube->down.s[2][2])) { if (cube->front.s[3][2] == cube->down.s[2][2]) { while (cube->up.s[3][2] == cube->down.s[2][2]) up_clock(cube,1); front_clock(cube,1); cfop_downIn_mid(cube); } else if (cube->right.s[3][2]== cube->down.s[2][2]) { while (cube->up.s[2][3] == cube->down.s[2][2]) up_clock(cube,1); right_clock(cube,1); cfop_downIn_mid(cube); } else if (cube->back.s[3][2] == cube->down.s[2][2]) { while (cube->up.s[1][2] == cube->down.s[2][2]) up_clock(cube,1); back_clock(cube,1); cfop_downIn_mid(cube); } else { while (cube->up.s[2][1] == cube->down.s[2][2]) up_clock(cube,1); left_clock(cube,1); cfop_downIn_mid(cube); } } //底面颜色对 侧面颜色不对 while ((cube->down.s[1][2]== cube->down.s[2][2]&&cube->front.s[3][2]!= cube->front.s[2][2]) || (cube->down.s[2][1] == cube->down.s[2][2] && cube->left.s[3][2] != cube->left.s[2][2]) || (cube->down.s[3][2] == cube->down.s[2][2]&& cube->back.s[3][2]!= cube->back.s[2][2]) || (cube->down.s[2][3] == cube->down.s[2][2] && cube->right.s[3][2]!= cube->right.s[2][2])) { if (cube->down.s[1][2] == cube->down.s[2][2] && cube->front.s[3][2] != cube->front.s[2][2]) { while (cube->up.s[3][2] == cube->down.s[2][2]) up_clock(cube,1); front_clock(cube,1); cfop_downIn_mid(cube); } if (cube->down.s[2][1] == cube->down.s[2][2] && cube->left.s[3][2] != cube->left.s[2][2]) { while (cube->up.s[2][1] ==cube->down.s[2][2]) up_clock(cube,1); left_clock(cube,1); cfop_downIn_mid(cube); } if (cube->down.s[3][2] == cube->down.s[2][2] && cube->back.s[3][2] != cube->back.s[2][2]) { while (cube->up.s[1][2] == cube->down.s[2][2]) up_clock(cube,1); back_clock(cube,1); cfop_downIn_mid(cube); } if (cube->down.s[2][3] == cube->down.s[2][2] && cube->right.s[3][2] != cube->right.s[2][2]) { while (cube->up.s[2][3] == cube->down.s[2][2]) up_clock(cube,1); right_clock(cube,1); cfop_downIn_mid(cube); } } //处理中心棱块和十字花的位置 while (1) { if (cube->front.s[1][2] == cube->front.s[2][2] && cube->up.s[3][2] == cube->down.s[2][2]) front_clock(cube,2); else if (cube->left.s[1][2] == cube->left.s[2][2] &&cube->up.s[2][1] == cube->down.s[2][2]) left_clock(cube,2); else if (cube->right.s[1][2] == cube->right.s[2][2] && cube->up.s[2][3] == cube->down.s[2][2]) right_clock(cube,2); else if (cube->back.s[1][2] == cube->back.s[2][2] && cube->up.s[1][2] == cube->down.s[2][2]) back_clock(cube,2); else if (((cube->front.s[2][2]==cube->front.s[3][2]) && (cube->back.s[2][2] == cube->back.s[3][2]) && (cube->left.s[2][2] ==cube->left.s[3][2]) && (cube->right.s[2][2] == cube->right.s[3][2] )) && (cube->down.s[3][2]== cube->down.s[2][2]) && (cube->down.s[2][3]== cube->down.s[2][2]) && (cube->down.s[2][1] == cube->down.s[2][2]) && (cube->down.s[1][2]== cube->down.s[2][2])) break; else up_clock(cube,1); } }}/*** brief: 第一层 第二层复原*/void cfop_f2l( Cube *cube ){ //底层+四个侧面的31=22,那么四个侧面的33必然等于22 while (!(cube->down.s[3][3]==cube->down.s[2][2]&&cube->down.s[1][3]== cube->down.s[2][2] &&cube->down.s[3][1]== cube->down.s[2][2] &&cube->down.s[1][1]==cube->down.s[2][2] &&cube->front.s[3][1]==cube->front.s[2][2]&&cube->right.s[3][1]==cube->right.s[2][2] &&cube->back.s[3][1] == cube->back.s[2][2]&&cube->left.s[3][3] == cube->left.s[2][2])) { //底块在上层四角 if (cube->up.s[1][1]== cube->down.s[2][2] ||cube->up.s[1][3]==cube->down.s[2][2] ||cube->up.s[3][1] == cube->down.s[2][2] || cube->up.s[3][3]== cube->down.s[2][2] ) { if (cube->up.s[3][3]== cube->down.s[2][2] && cube->front.s[1][3] == cube->right.s[2][2] &&cube->right.s[1][1]== cube->front.s[2][2]) { right_clock(cube,1); up_anticlock(cube,1); right_anticlock(cube,1); front_anticlock(cube,1); up_clock(cube,2); front_clock(cube,1); } else if (cube->up.s[3][1]== cube->down.s[2][2] &&cube->front.s[1][1]== cube->left.s[2][2] && cube->left.s[1][3]== cube->front.s[2][2]) { left_anticlock(cube,1); up_clock(cube,1); left_clock(cube,1); front_clock(cube,1); up_clock(cube,2); front_anticlock(cube,1); } else if (cube->up.s[1][3]== cube->down.s[2][2] && cube->right.s[1][3] ==cube->back.s[2][2] &&cube->back.s[1][1]==cube->right.s[2][2]) { back_clock(cube,1); up_anticlock(cube,1); back_anticlock(cube,1); right_anticlock(cube,1); up_clock(cube,2); right_clock(cube,1); } else if (cube->up.s[1][1] == cube->down.s[2][2] && cube->left.s[1][1]== cube->back.s[2][2] && cube->back.s[1][3]== cube->left.s[2][2]) { back_anticlock(cube,1); up_clock(cube,1); back_clock(cube,1); left_clock(cube,1); up_clock(cube,2); left_anticlock(cube,1); } else up_clock(cube,1); } //底块在侧面的上面两角 else if (cube->front.s[1][1]== cube->down.s[2][2] || cube->front.s[1][3]== cube->down.s[2][2] || cube->back.s[1][3]== cube->down.s[2][2]|| cube->back.s[1][1]== cube->down.s[2][2] || cube->left.s[1][1] ==cube->down.s[2][2]|| cube->left.s[1][3] == cube->down.s[2][2] || cube->right.s[1][3]==cube->down.s[2][2]|| cube->right.s[1][1] == cube->down.s[2][2]) { if (cube->front.s[1][1] == cube->down.s[2][2] &&cube->up.s[3][1]== cube->front.s[2][2] && cube->left.s[1][3]== cube->left.s[2][2]) { front_clock(cube,1); up_clock(cube,1); front_anticlock(cube,1); } else if (cube->front.s[1][3]== cube->down.s[2][2] && cube->up.s[3][3]== cube->front.s[2][2] && cube->right.s[1][1]== cube->right.s[2][2]) { front_anticlock(cube,1); up_anticlock(cube,1); front_clock(cube,1); } else if (cube->back.s[1][3]==cube->down.s[2][2] &&cube->up.s[1][1] == cube->back.s[2][2] && cube->left.s[1][1]== cube->left.s[2][2]) { back_anticlock(cube,1); up_anticlock(cube,1); back_clock(cube,1); } else if (cube->back.s[1][1]== cube->down.s[2][2] && cube->up.s[1][3] == cube->back.s[2][2] &&cube->right.s[1][3]== cube->right.s[2][2]) { back_clock(cube,1); up_clock(cube,1); back_anticlock(cube,1); } else if (cube->left.s[1][1]== cube->down.s[2][2] &&cube->up.s[1][1]== cube->left.s[2][2] && cube->back.s[1][3]== cube->back.s[2][2]) { left_clock(cube,1); up_clock(cube,1); left_anticlock(cube,1); } else if (cube->left.s[1][3] == cube->down.s[2][2] && cube->up.s[3][1] == cube->left.s[2][2] && cube->front.s[1][1] == cube->front.s[2][2]) { left_anticlock(cube,1); up_anticlock(cube,1); left_clock(cube,1); } else if (cube->right.s[1][3]== cube->down.s[2][2] && cube->up.s[1][3] ==cube->right.s[2][2] &&cube->back.s[1][1] == cube->back.s[2][2]) { right_anticlock(cube,1); up_anticlock(cube,1); right_clock(cube,1); } else if (cube->right.s[1][1] == cube->down.s[2][2] && cube->up.s[3][3] == cube->right.s[2][2] && cube->front.s[1][3] == cube->front.s[2][2]) { right_clock(cube,1); up_clock(cube,1); right_anticlock(cube,1); } else up_clock(cube,1); } //底块在底层但是位置不对 else { if (cube->front.s[3][3]== cube->down.s[2][2] || cube->right.s[3][1] == cube->down.s[2][2] || (cube->down.s[1][3]== cube->down.s[2][2] && (cube->front.s[3][3]!= cube->front.s[2][2]||cube->right.s[3][1]!= cube->right.s[2][2]))) { right_clock(cube,1); up_clock(cube,1); right_anticlock(cube,1); } else if (cube->front.s[3][1]== cube->down.s[2][2]|| cube->left.s[3][3] == cube->down.s[2][2] || (cube->down.s[1][1]== cube->down.s[2][2] && (cube->front.s[3][1]!=cube->front.s[2][2]||cube->left.s[3][3]!= cube->left.s[2][2]))) { left_anticlock(cube,1); up_anticlock(cube,1); left_clock(cube,1); } else if (cube->left.s[3][1]== cube->down.s[2][2] || cube->back.s[3][3] == cube->down.s[2][2] || (cube->down.s[3][1]== cube->down.s[2][2] && (cube->left.s[3][1]!= cube->left.s[2][2]|| cube->back.s[3][3] != cube->back.s[2][2]))) { back_anticlock(cube,1); up_anticlock(cube,1); back_clock(cube,1); } else { back_clock(cube,1); up_clock(cube,1); back_anticlock(cube,1); } } } //中间层 while (!(cube->front.s[2][3]== cube->front.s[2][2] && cube->right.s[2][1]== cube->right.s[2][2] && cube->right.s[2][3] == cube->right.s[2][2]&&cube->back.s[2][3] == cube->back.s[2][2] && cube->back.s[2][1]== cube->back.s[2][2] && cube->left.s[2][1] ==cube->left.s[2][2] && cube->left.s[2][3]== cube->left.s[2][2] && cube->front.s[2][1]== cube->front.s[2][2])) { //中间层在上层的情况 if ((cube->up.s[1][2]!= cube->up.s[2][2] && cube->back.s[1][2]!= cube->up.s[2][2]) || (cube->up.s[2][1] != cube->up.s[2][2]&& cube->left.s[1][2]!= cube->up.s[2][2]) || (cube->up.s[3][2] != cube->up.s[2][2]&& cube->front.s[1][2]!= cube->up.s[2][2]) || (cube->up.s[2][3] != cube->up.s[2][2] && cube->right.s[1][2]!= cube->up.s[2][2])) { //中间的色块在上面的12位置 if (cube->up.s[1][2]!= cube->up.s[2][2] && cube->back.s[1][2] == cube->back.s[2][2]) { if (cube->up.s[1][2]== cube->left.s[2][2]) { up_clock(cube,1); left_clock(cube,1); up_anticlock(cube,1); left_anticlock(cube,1); up_anticlock(cube,1); back_anticlock(cube,1); up_clock(cube,1); back_clock(cube,1); } else { up_anticlock(cube,1); right_anticlock(cube,1); up_clock(cube,1); right_clock(cube,1); up_clock(cube,1); back_clock(cube,1); up_anticlock(cube,1); back_anticlock(cube,1); } } //中间色块在上面的21位置 else if (cube->up.s[2][1]!= cube->up.s[2][2]&& cube->left.s[1][2] == cube->left.s[2][2]) { if (cube->up.s[2][1]==cube->back.s[2][2]) { up_anticlock(cube,1); back_anticlock(cube,1); up_clock(cube,1); back_clock(cube,1); up_clock(cube,1); left_clock(cube,1); up_anticlock(cube,1); left_anticlock(cube,1); } else { up_clock(cube,1); front_clock(cube,1); up_anticlock(cube,1); front_anticlock(cube,1); up_anticlock(cube,1); left_anticlock(cube,1); up_clock(cube,1); left_clock(cube,1); } } //中间色块在上面的32位置 else if (cube->up.s[3][2]!= cube->up.s[2][2] && cube->front.s[1][2] == cube->front.s[2][2]) { if (cube->up.s[3][2]==cube->right.s[2][2]) { up_clock(cube,1); right_clock(cube,1); up_anticlock(cube,1); right_anticlock(cube,1); up_anticlock(cube,1); front_anticlock(cube,1); up_clock(cube,1); front_clock(cube,1); } else { up_anticlock(cube,1); left_anticlock(cube,1); up_clock(cube,1); left_clock(cube,1); up_clock(cube,1); front_clock(cube,1); up_anticlock(cube,1); front_anticlock(cube,1); } } //中间色块在上面的23位置 else if (cube->up.s[2][3]!= cube->up.s[2][2] && cube->right.s[1][2]== cube->right.s[2][2]) { if (cube->up.s[2][3]== cube->front.s[2][2]) { up_anticlock(cube,1); front_anticlock(cube,1); up_clock(cube,1); front_clock(cube,1); up_clock(cube,1); right_clock(cube,1); up_anticlock(cube,1); right_anticlock(cube,1); } else { up_clock(cube,1); back_clock(cube,1); up_anticlock(cube,1); back_anticlock(cube,1); up_anticlock(cube,1); right_anticlock(cube,1); up_clock(cube,1); right_clock(cube,1); } } else up_clock(cube,1); } //中间色块在中层的情况 else { if (cube->front.s[2][3]!= cube->front.s[2][2]) { right_clock(cube,1); up_anticlock(cube,1); right_anticlock(cube,1); up_anticlock(cube,1); front_anticlock(cube,1); up_clock(cube,1); front_clock(cube,1); } else if (cube->right.s[2][3]!=cube->right.s[2][2]) { back_clock(cube,1); up_anticlock(cube,1); back_anticlock(cube,1); up_anticlock(cube,1); right_anticlock(cube,1); up_clock(cube,1); right_clock(cube,1); } else if (cube->back.s[2][3]!= cube->back.s[2][2]) { left_clock(cube,1); up_anticlock(cube,1); left_anticlock(cube,1); up_anticlock(cube,1); back_anticlock(cube,1); up_clock(cube,1); back_clock(cube,1); } else { front_clock(cube,1); up_anticlock(cube,1); front_anticlock(cube,1); up_anticlock(cube,1); left_anticlock(cube,1); up_clock(cube,1); left_clock(cube,1); } } }}/*** drief: 顶面复原,只差四个角就完成复原了*/void cfop_oll( Cube *cube ){ while (!(cube->up.s[1][1] == cube->up.s[2][2] && cube->up.s[1][2] == cube->up.s[2][2] && cube->up.s[1][3] == cube->up.s[2][2] && cube->up.s[2][1] == cube->up.s[2][2] && cube->up.s[2][3] == cube->up.s[2][2] && cube->up.s[3][1] == cube->up.s[2][2] && cube->up.s[3][2] == cube->up.s[2][2] && cube->up.s[3][3] == cube->up.s[2][2])) { //OLL1 if (cube->back.s[1][2] == cube->up.s[2][2] && cube->right.s[1][3] == cube->up.s[2][2] && cube->right.s[1][2] == cube->up.s[2][2] && cube->right.s[1][1] == cube->up.s[2][2] && cube->front.s[1][2] == cube->up.s[2][2] && cube->left.s[1][1] == cube->up.s[2][2] && cube->left.s[1][2] == cube->up.s[2][2] && cube->left.s[1][3] == cube->up.s[2][2]) { right_clock(cube,1); up_clock(cube,2); right_clock(cube,2); front_clock(cube,1); right_clock(cube,1); front_anticlock(cube,1); up_clock(cube,2); right_anticlock(cube,1); front_clock(cube,1); right_clock(cube,1); front_anticlock(cube,1); } //OLL2 else if (cube->back.s[1][2] == cube->up.s[2][2] && cube->back.s[1][1] == cube->up.s[2][2] && cube->right.s[1][2] == cube->up.s[2][2] && cube->front.s[1][2] == cube->up.s[2][2] && cube->front.s[1][3] == cube->up.s[2][2] && cube->left.s[1][1] == cube->up.s[2][2] && cube->left.s[1][2] == cube->up.s[2][2] && cube->left.s[1][3] == cube->up.s[2][2]) { front_clock(cube,1); right_clock(cube,1); up_clock(cube,1); right_anticlock(cube,1); up_anticlock(cube,1); front_anticlock(cube,1); back_clock(cube,1); up_clock(cube,1); left_clock(cube,1); up_anticlock(cube,1); left_anticlock(cube,1); back_anticlock(cube,1); } //OLL3 else if (cube->back.s[1][3] == cube->up.s[2][2] && cube->back.s[1][2] == cube->up.s[2][2] && cube->right.s[1][3] == cube->up.s[2][2] && cube->right.s[1][2] == cube->up.s[2][2] && cube->front.s[1][2] == cube->up.s[2][2] && cube->left.s[1][3] == cube->up.s[2][2] && cube->left.s[1][2] == cube->up.s[2][2] && cube->up.s[3][3] == cube->up.s[2][2]) { back_clock(cube,1); up_clock(cube,1); left_clock(cube,1); up_anticlock(cube,1); left_anticlock(cube,1); back_anticlock(cube,1); up_anticlock(cube,1); front_clock(cube,1); right_clock(cube,1); up_clock(cube,1); right_anticlock(cube,1); up_anticlock(cube,1); front_anticlock(cube,1); } //OLL4 else if (cube->back.s[1][2] == cube->up.s[2][2] && cube->right.s[1][2] == cube->up.s[2][2] && cube->right.s[1][1] == cube->up.s[2][2] && cube->front.s[1][2] == cube->up.s[2][2] && cube->front.s[1][1] == cube->up.s[2][2] && cube->left.s[1][1] == cube->up.s[2][2] && cube->left.s[1][2] == cube->up.s[2][2] && cube->up.s[1][3] == cube->up.s[2][2]) { back_clock(cube,1); up_clock(cube,1); left_clock(cube,1); up_anticlock(cube,1); left_anticlock(cube,1); back_anticlock(cube,1); right_clock(cube,1); back_clock(cube,1); up_clock(cube,1); back_anticlock(cube,1); up_anticlock(cube,1); right_anticlock(cube,1); } //OLL5 else if (cube->back.s[1][2] == cube->up.s[2][2] && cube->right.s[1][3] == cube->up.s[2][2] && cube->right.s[1][2] == cube->up.s[2][2] && cube->front.s[1][2] == cube->up.s[2][2] && cube->front.s[1][1] == cube->up.s[2][2] && cube->left.s[1][2] == cube->up.s[2][2] && cube->up.s[1][1] == cube->up.s[2][2] && cube->up.s[3][3] == cube->up.s[2][2]) { front_clock(cube,1); up_clock(cube,1); right_anticlock(cube,1); up_anticlock(cube,1); front_anticlock(cube,1); up_clock(cube,1); front_clock(cube,1); right_clock(cube,2); up_clock(cube,1); right_anticlock(cube,1); up_anticlock(cube,1); front_anticlock(cube,1); } //OLL6 else if (cube->back.s[1][3] == cube->up.s[2][2] && cube->back.s[1][2] == cube->up.s[2][2] && cube->back.s[1][1] == cube->up.s[2][2] && cube->right.s[1][2] == cube->up.s[2][2] && cube->front.s[1][2] == cube->up.s[2][2] && cube->left.s[1][2] == cube->up.s[2][2] && cube->up.s[3][1] == cube->up.s[2][2] && cube->up.s[3][3] == cube->up.s[2][2]) { front_clock(cube,1); right_clock(cube,1); up_clock(cube,1); right_anticlock(cube,1); up_clock(cube,1); front_anticlock(cube,1); up_clock(cube,2); front_anticlock(cube,1); left_clock(cube,1); front_clock(cube,1); left_anticlock(cube,1); } //OLL7 else if (cube->back.s[1][2] == cube->up.s[2][2] && cube->right.s[1][2] == cube->up.s[2][2] && cube->right.s[1][1] == cube->up.s[2][2] && cube->front.s[1][2] == cube->up.s[2][2] && cube->left.s[1][3] == cube->up.s[2][2] && cube->left.s[1][2] == cube->up.s[2][2] && cube->up.s[1][1] == cube->up.s[2][2] && cube->up.s[1][3] == cube->up.s[2][2]) { left_anticlock(cube,1); right_clock(cube,1); back_clock(cube,1); right_clock(cube,1); back_clock(cube,1); right_anticlock(cube,1); back_anticlock(cube,1); left_clock(cube,1); right_clock(cube,2); front_clock(cube,1); right_clock(cube,1); front_anticlock(cube,1); } //OLL8 else if (cube->back.s[1][2] == cube->up.s[2][2] && cube->right.s[1][2] == cube->up.s[2][2] && cube->front.s[1][2] == cube->up.s[2][2] && cube->left.s[1][2] == cube->up.s[2][2] && cube->up.s[1][1] == cube->up.s[2][2] && cube->up.s[1][3] == cube->up.s[2][2] && cube->up.s[3][1] == cube->up.s[2][2] && cube->up.s[3][3] == cube->up.s[2][2]) { left_anticlock(cube,1); right_clock(cube,1); back_clock(cube,1); right_clock(cube,1); back_clock(cube,1); right_anticlock(cube,1); back_anticlock(cube,1); left_clock(cube,2); right_clock(cube,2); front_clock(cube,1); right_clock(cube,1); front_anticlock(cube,1); left_anticlock(cube,1); } //OLL9 else if (cube->back.s[1][2] == cube->up.s[2][2] && cube->right.s[1][3] == cube->up.s[2][2] && cube->right.s[1][1] == cube->up.s[2][2] && cube->front.s[1][2] == cube->up.s[2][2] && cube->left.s[1][1] == cube->up.s[2][2] && cube->left.s[1][3] == cube->up.s[2][2] && cube->up.s[2][1] == cube->up.s[2][2] && cube->up.s[2][3] == cube->up.s[2][2]) { front_clock(cube,1); right_clock(cube,1); up_clock(cube,1); right_anticlock(cube,1); up_anticlock(cube,1); right_clock(cube,1); front_anticlock(cube,1); left_clock(cube,1); front_clock(cube,1); right_anticlock(cube,1); front_anticlock(cube,1); left_anticlock(cube,1); } //OLL10 else if (cube->right.s[1][3] == cube->up.s[2][2] && cube->right.s[1][2] == cube->up.s[2][2] && cube->right.s[1][1] == cube->up.s[2][2] && cube->left.s[1][1] == cube->up.s[2][2] && cube->left.s[1][2] == cube->up.s[2][2] && cube->left.s[1][3] == cube->up.s[2][2] && cube->up.s[1][2] == cube->up.s[2][2] && cube->up.s[3][2] == cube->up.s[2][2]) { right_clock(cube,1); up_clock(cube,2); right_clock(cube,2); up_anticlock(cube,1); right_clock(cube,1); up_anticlock(cube,1); right_anticlock(cube,1); up_clock(cube,2); front_clock(cube,1); right_clock(cube,1); front_anticlock(cube,1); } //OLL11 else if (cube->back.s[1][3] == cube->up.s[2][2] && cube->back.s[1][2] == cube->up.s[2][2] && cube->right.s[1][3] == cube->up.s[2][2] && cube->right.s[1][1] == cube->up.s[2][2] && cube->front.s[1][2] == cube->up.s[2][2] && cube->front.s[1][1] == cube->up.s[2][2] && cube->up.s[2][1] == cube->up.s[2][2] && cube->up.s[2][3] == cube->up.s[2][2]) { front_clock(cube,1); up_clock(cube,1); right_clock(cube,1); up_anticlock(cube,1); right_anticlock(cube,1); up_clock(cube,1); right_clock(cube,1); up_anticlock(cube,1); right_anticlock(cube,1); front_anticlock(cube,1); } //OLL12 else if (cube->back.s[1][3] == cube->up.s[2][2] && cube->right.s[1][3] == cube->up.s[2][2] && cube->right.s[1][2] == cube->up.s[2][2] && cube->right.s[1][1] == cube->up.s[2][2] && cube->front.s[1][1] == cube->up.s[2][2] && cube->left.s[1][2] == cube->up.s[2][2] && cube->up.s[1][2] == cube->up.s[2][2] && cube->up.s[3][2] == cube->up.s[2][2]) { right_anticlock(cube,1); up_anticlock(cube,1); right_clock(cube,1); up_anticlock(cube,1); right_anticlock(cube,1); up_clock(cube,1); front_anticlock(cube,1); up_clock(cube,1); front_clock(cube,1); back_clock(cube,1); } //OLL13 else if (cube->back.s[1][3] == cube->up.s[2][2] && cube->back.s[1][1] == cube->up.s[2][2] && cube->right.s[1][2] == cube->up.s[2][2] && cube->front.s[1][1] == cube->up.s[2][2] && cube->front.s[1][2] == cube->up.s[2][2] && cube->front.s[1][3] == cube->up.s[2][2] && cube->up.s[1][2] == cube->up.s[2][2] && cube->up.s[2][1] == cube->up.s[2][2]) { left_clock(cube,1); front_clock(cube,2); right_anticlock(cube,1); front_anticlock(cube,1); right_clock(cube,1); front_clock(cube,1); right_anticlock(cube,1); front_anticlock(cube,1); right_clock(cube,1); front_anticlock(cube,1); left_anticlock(cube,1); } //OLL14 else if (cube->back.s[1][3] == cube->up.s[2][2] && cube->back.s[1][2] == cube->up.s[2][2] && cube->back.s[1][1] == cube->up.s[2][2] && cube->right.s[1][2] == cube->up.s[2][2] && cube->front.s[1][1] == cube->up.s[2][2] && cube->front.s[1][3] == cube->up.s[2][2] && cube->up.s[2][1] == cube->up.s[2][2] && cube->up.s[3][2] == cube->up.s[2][2]) { left_anticlock(cube,1); back_clock(cube,2); right_clock(cube,1); back_clock(cube,1); right_anticlock(cube,1); back_anticlock(cube,1); right_clock(cube,1); back_clock(cube,1); right_anticlock(cube,1); back_clock(cube,1); left_clock(cube,1); } //OLL15 else if (cube->back.s[1][3] == cube->up.s[2][2] && cube->back.s[1][2] == cube->up.s[2][2] && cube->right.s[1][3] == cube->up.s[2][2] && cube->right.s[1][2] == cube->up.s[2][2] && cube->right.s[1][1] == cube->up.s[2][2] && cube->front.s[1][1] == cube->up.s[2][2] && cube->up.s[2][1] == cube->up.s[2][2] && cube->up.s[3][2] == cube->up.s[2][2]) { right_clock(cube,1); back_anticlock(cube,1); right_clock(cube,2); front_clock(cube,1); right_clock(cube,2); back_clock(cube,1); right_clock(cube,2); front_anticlock(cube,1); right_clock(cube,1); } //OLL16 else if (cube->back.s[1][3] == cube->up.s[2][2] && cube->right.s[1][3] == cube->up.s[2][2] && cube->right.s[1][2] == cube->up.s[2][2] && cube->right.s[1][1] == cube->up.s[2][2] && cube->front.s[1][2] == cube->up.s[2][2] && cube->front.s[1][1] == cube->up.s[2][2] && cube->up.s[1][2] == cube->up.s[2][2] && cube->up.s[2][1] == cube->up.s[2][2]) { right_anticlock(cube,1); front_clock(cube,1); right_clock(cube,2); back_anticlock(cube,1); right_clock(cube,2); front_anticlock(cube,1); right_clock(cube,2); back_clock(cube,1); right_anticlock(cube,1); } //OLL17 else if (cube->back.s[1][1] == cube->up.s[2][2] && cube->right.s[1][2] == cube->up.s[2][2] && cube->front.s[1][2] == cube->up.s[2][2] && cube->front.s[1][3] == cube->up.s[2][2] && cube->left.s[1][1] == cube->up.s[2][2] && cube->left.s[1][3] == cube->up.s[2][2] && cube->up.s[1][2] == cube->up.s[2][2] && cube->up.s[2][1] == cube->up.s[2][2]) { front_clock(cube,1); right_clock(cube,1); up_clock(cube,1); right_anticlock(cube,1); up_anticlock(cube,1); right_clock(cube,1); up_clock(cube,1); right_anticlock(cube,1); up_anticlock(cube,1); front_anticlock(cube,1); } //OLL18 else if (cube->back.s[1][2] == cube->up.s[2][2] && cube->back.s[1][1] == cube->up.s[2][2] && cube->right.s[1][2] == cube->up.s[2][2] && cube->front.s[1][3] == cube->up.s[2][2] && cube->left.s[1][1] == cube->up.s[2][2] && cube->left.s[1][3] == cube->up.s[2][2] && cube->up.s[2][1] == cube->up.s[2][2] && cube->up.s[3][2] == cube->up.s[2][2]) { back_anticlock(cube,1); right_anticlock(cube,1); up_anticlock(cube,1); right_clock(cube,1); up_clock(cube,1); right_anticlock(cube,1); up_anticlock(cube,1); right_clock(cube,1); up_clock(cube,1); back_clock(cube,1); } //OLL19 else if (cube->back.s[1][3] == cube->up.s[2][2] && cube->right.s[1][3] == cube->up.s[2][2] && cube->right.s[1][2] == cube->up.s[2][2] && cube->front.s[1][2] == cube->up.s[2][2] && cube->front.s[1][3] == cube->up.s[2][2] && cube->up.s[1][2] == cube->up.s[2][2] && cube->up.s[2][1] == cube->up.s[2][2] && cube->up.s[3][1] == cube->up.s[2][2]) { left_clock(cube,1); front_clock(cube,1); right_anticlock(cube,1); front_clock(cube,1); right_clock(cube,1); front_clock(cube,2); left_anticlock(cube,1); } //OLL20 else if (cube->back.s[1][2] == cube->up.s[2][2] && cube->back.s[1][1] == cube->up.s[2][2] && cube->right.s[1][2] == cube->up.s[2][2] && cube->right.s[1][1] == cube->up.s[2][2] && cube->front.s[1][1] == cube->up.s[2][2] && cube->up.s[1][1] == cube->up.s[2][2] && cube->up.s[2][1] == cube->up.s[2][2] && cube->up.s[3][2] == cube->up.s[2][2]) { left_anticlock(cube,1); back_anticlock(cube,1); right_clock(cube,1); back_anticlock(cube,1); right_anticlock(cube,1); back_clock(cube,2); left_clock(cube,1); } //OLL21 else if (cube->back.s[1][1] == cube->up.s[2][2] && cube->right.s[1][1] == cube->up.s[2][2] && cube->front.s[1][2] == cube->up.s[2][2] && cube->front.s[1][1] == cube->up.s[2][2] && cube->left.s[1][2] == cube->up.s[2][2] && cube->up.s[1][1] == cube->up.s[2][2] && cube->up.s[1][2] == cube->up.s[2][2] && cube->up.s[2][3] == cube->up.s[2][2]) { left_clock(cube, 1); right_clock(cube, 2); front_anticlock(cube, 1); right_clock(cube, 1); front_anticlock(cube, 1); right_anticlock(cube, 1); front_clock(cube, 2); right_clock(cube, 1); front_anticlock(cube, 1); right_clock(cube, 1); left_anticlock(cube, 1); } //OLL22 else if (cube->back.s[1][3] == cube->up.s[2][2] && cube->back.s[1][2] == cube->up.s[2][2] && cube->right.s[1][3] == cube->up.s[2][2] && cube->front.s[1][3] == cube->up.s[2][2] && cube->left.s[1][2] == cube->up.s[2][2] && cube->up.s[2][3] == cube->up.s[2][2] && cube->up.s[3][1] == cube->up.s[2][2] && cube->up.s[3][2] == cube->up.s[2][2]) { left_anticlock(cube, 1); right_clock(cube, 2); back_clock(cube, 1); right_anticlock(cube, 1); back_clock(cube, 1); right_clock(cube, 1); back_clock(cube, 2); right_anticlock(cube, 1); back_clock(cube, 1); left_clock(cube, 1); right_anticlock(cube, 1); } //OLL23 else if (cube->back.s[1][1] == cube->up.s[2][2] && cube->right.s[1][2] == cube->up.s[2][2] && cube->front.s[1][2] == cube->up.s[2][2] && cube->front.s[1][1] == cube->up.s[2][2] && cube->left.s[1][1] == cube->up.s[2][2] && cube->up.s[1][2] == cube->up.s[2][2] && cube->up.s[2][1] == cube->up.s[2][2] && cube->up.s[3][3] == cube->up.s[2][2]) { right_anticlock(cube, 1); up_anticlock(cube, 1); right_clock(cube, 1); front_clock(cube, 1); right_anticlock(cube, 1); front_anticlock(cube, 1); up_clock(cube, 1); front_clock(cube, 1); right_clock(cube, 1); front_anticlock(cube, 1); } //OLL24 else if (cube->back.s[1][3] == cube->up.s[2][2] && cube->back.s[1][2] == cube->up.s[2][2] && cube->right.s[1][2] == cube->up.s[2][2] && cube->front.s[1][3] == cube->up.s[2][2] && cube->left.s[1][3] == cube->up.s[2][2] && cube->up.s[1][3] == cube->up.s[2][2] && cube->up.s[2][1] == cube->up.s[2][2] && cube->up.s[3][2] == cube->up.s[2][2]) { right_clock(cube, 1); up_clock(cube, 1); right_anticlock(cube, 1); up_clock(cube, 1); right_anticlock(cube, 1); front_clock(cube, 1); right_clock(cube, 1); front_anticlock(cube, 1); right_clock(cube, 1); up_clock(cube, 2); right_anticlock(cube, 1); } //OLL25 else if (cube->back.s[1][3] == cube->up.s[2][2] && cube->back.s[1][2] == cube->up.s[2][2] && cube->right.s[1][3] == cube->up.s[2][2] && cube->left.s[1][3] == cube->up.s[2][2] && cube->left.s[1][2] == cube->up.s[2][2] && cube->up.s[2][3] == cube->up.s[2][2] && cube->up.s[3][2] == cube->up.s[2][2] && cube->up.s[3][3] == cube->up.s[2][2]) { left_anticlock(cube, 1); back_clock(cube, 2); right_clock(cube, 1); back_clock(cube, 1); right_anticlock(cube, 1); back_clock(cube, 1); left_clock(cube, 1); } //OLL26 else if (cube->right.s[1][1] == cube->up.s[2][2] && cube->front.s[1][2] == cube->up.s[2][2] && cube->front.s[1][1] == cube->up.s[2][2] && cube->left.s[1][1] == cube->up.s[2][2] && cube->left.s[1][2] == cube->up.s[2][2] && cube->up.s[1][3] == cube->up.s[2][2] && cube->up.s[1][2] == cube->up.s[2][2] && cube->up.s[2][3] == cube->up.s[2][2]) { left_clock(cube, 1); front_clock(cube, 2); right_anticlock(cube, 1); front_anticlock(cube, 1); right_clock(cube, 1); front_anticlock(cube, 1); left_anticlock(cube, 1); } //OLL27 else if (cube->back.s[1][3] == cube->up.s[2][2] && cube->back.s[1][2] == cube->up.s[2][2] && cube->right.s[1][3] == cube->up.s[2][2] && cube->front.s[1][2] == cube->up.s[2][2] && cube->front.s[1][3] == cube->up.s[2][2] && cube->up.s[2][1] == cube->up.s[2][2] && cube->up.s[2][3] == cube->up.s[2][2] && cube->up.s[3][1] == cube->up.s[2][2]) { left_clock(cube, 1); front_anticlock(cube, 1); left_anticlock(cube, 1); up_anticlock(cube, 1); left_clock(cube, 1); front_clock(cube, 1); left_anticlock(cube, 1); front_anticlock(cube, 1); up_clock(cube, 1); front_clock(cube, 1); } //OLL28 else if (cube->back.s[1][1] == cube->up.s[2][2] && cube->back.s[1][2] == cube->up.s[2][2] && cube->front.s[1][2] == cube->up.s[2][2] && cube->front.s[1][1] == cube->up.s[2][2] && cube->left.s[1][1] == cube->up.s[2][2] && cube->up.s[2][1] == cube->up.s[2][2] && cube->up.s[2][3] == cube->up.s[2][2] && cube->up.s[3][3] == cube->up.s[2][2]) { right_anticlock(cube, 1); front_clock(cube, 1); right_clock(cube, 1); up_clock(cube, 1); right_anticlock(cube, 1); front_anticlock(cube, 1); right_clock(cube, 1); front_clock(cube, 1); up_anticlock(cube, 1); front_anticlock(cube, 1); } //OLL29 else if (cube->back.s[1][2] == cube->up.s[2][2] && cube->right.s[1][1] == cube->up.s[2][2] && cube->front.s[1][2] == cube->up.s[2][2] && cube->front.s[1][1] == cube->up.s[2][2] && cube->left.s[1][1] == cube->up.s[2][2] && cube->up.s[2][1] == cube->up.s[2][2] && cube->up.s[2][3] == cube->up.s[2][2] && cube->up.s[1][3] == cube->up.s[2][2]) { left_clock(cube, 1); front_clock(cube, 1); left_anticlock(cube, 1); right_clock(cube, 1); up_clock(cube, 1); right_anticlock(cube, 1); up_anticlock(cube, 1); left_clock(cube, 1); front_anticlock(cube, 1); left_anticlock(cube, 1); } //OLL30 else if (cube->back.s[1][2] == cube->up.s[2][2] && cube->right.s[1][3] == cube->up.s[2][2] && cube->front.s[1][2] == cube->up.s[2][2] && cube->front.s[1][3] == cube->up.s[2][2] && cube->left.s[1][3] == cube->up.s[2][2] && cube->up.s[2][1] == cube->up.s[2][2] && cube->up.s[2][3] == cube->up.s[2][2] && cube->up.s[1][1] == cube->up.s[2][2]) { right_anticlock(cube, 1); front_anticlock(cube, 1); right_clock(cube, 1); left_anticlock(cube, 1); up_anticlock(cube, 1); left_clock(cube, 1); up_clock(cube, 1); right_anticlock(cube, 1); front_clock(cube, 1); right_clock(cube, 1); } //OLL31 else if (cube->back.s[1][3] == cube->up.s[2][2] && cube->back.s[1][1] == cube->up.s[2][2] && cube->up.s[2][1] == cube->up.s[2][2] && cube->up.s[2][3] == cube->up.s[2][2] && cube->up.s[1][2] == cube->up.s[2][2] && cube->up.s[3][1] == cube->up.s[2][2] && cube->up.s[3][2] == cube->up.s[2][2] && cube->up.s[3][3] == cube->up.s[2][2]) { right_anticlock(cube, 1); up_clock(cube, 2); right_clock(cube, 1); front_clock(cube, 1); up_anticlock(cube, 1); right_anticlock(cube, 1); up_anticlock(cube, 1); right_clock(cube, 1); up_clock(cube, 1); front_anticlock(cube, 1); } //OLL32 else if (cube->back.s[1][3] == cube->up.s[2][2] && cube->front.s[1][1] == cube->up.s[2][2] && cube->up.s[1][2] == cube->up.s[2][2] && cube->up.s[1][3] == cube->up.s[2][2] && cube->up.s[2][1] == cube->up.s[2][2] && cube->up.s[2][3] == cube->up.s[2][2] && cube->up.s[3][2] == cube->up.s[2][2] && cube->up.s[3][3] == cube->up.s[2][2]) { left_clock(cube, 1); front_clock(cube, 1); right_anticlock(cube, 1); front_anticlock(cube, 1); left_anticlock(cube, 1); front_clock(cube, 1); right_clock(cube, 1); front_anticlock(cube, 1); } //OLL33 else if (cube->front.s[1][3] == cube->up.s[2][2] && cube->left.s[1][1] == cube->up.s[2][2] && cube->up.s[1][2] == cube->up.s[2][2] && cube->up.s[1][3] == cube->up.s[2][2] && cube->up.s[2][1] == cube->up.s[2][2] && cube->up.s[2][3] == cube->up.s[2][2] && cube->up.s[3][1] == cube->up.s[2][2] && cube->up.s[3][2] == cube->up.s[2][2]) { front_anticlock(cube, 1); left_clock(cube, 1); front_clock(cube, 1); right_anticlock(cube, 1); front_anticlock(cube, 1); left_anticlock(cube, 1); front_clock(cube, 1); right_clock(cube, 1); } //OLL34 else if (cube->right.s[1][1] == cube->up.s[2][2] && cube->front.s[1][1] == cube->up.s[2][2] && cube->left.s[1][1] == cube->up.s[2][2] && cube->up.s[1][2] == cube->up.s[2][2] && cube->up.s[1][3] == cube->up.s[2][2] && cube->up.s[2][1] == cube->up.s[2][2] && cube->up.s[2][3] == cube->up.s[2][2] && cube->up.s[3][2] == cube->up.s[2][2]) { right_clock(cube, 1); up_clock(cube, 2); right_anticlock(cube, 1); up_anticlock(cube, 1); right_clock(cube, 1); up_anticlock(cube, 1); right_anticlock(cube, 1); } //OLL35 else if (cube->back.s[1][3] == cube->up.s[2][2] && cube->right.s[1][3] == cube->up.s[2][2] && cube->front.s[1][3] == cube->up.s[2][2] && cube->up.s[1][2] == cube->up.s[2][2] && cube->up.s[3][1] == cube->up.s[2][2] && cube->up.s[2][1] == cube->up.s[2][2] && cube->up.s[2][3] == cube->up.s[2][2] && cube->up.s[3][2] == cube->up.s[2][2]) { right_clock(cube, 1); up_clock(cube, 1); right_anticlock(cube, 1); up_clock(cube, 1); right_clock(cube, 1); up_clock(cube, 2); right_anticlock(cube, 1); } //OLL36 else if (cube->back.s[1][3] == cube->up.s[2][2] && cube->back.s[1][1] == cube->up.s[2][2] && cube->front.s[1][1] == cube->up.s[2][2] && cube->front.s[1][3] == cube->up.s[2][2] && cube->up.s[1][2] == cube->up.s[2][2] && cube->up.s[2][1] == cube->up.s[2][2] && cube->up.s[2][3] == cube->up.s[2][2] && cube->up.s[3][2] == cube->up.s[2][2]) { right_clock(cube, 1); up_clock(cube, 2); right_anticlock(cube, 1); up_anticlock(cube, 1); right_clock(cube, 1); up_clock(cube, 1); right_anticlock(cube, 1); up_anticlock(cube, 1); right_clock(cube, 1); up_anticlock(cube, 1); right_anticlock(cube, 1); } //OLL37 else if (cube->back.s[1][1] == cube->up.s[2][2] && cube->front.s[1][3] == cube->up.s[2][2] && cube->left.s[1][1] == cube->up.s[2][2] && cube->left.s[1][3] == cube->up.s[2][2] && cube->up.s[1][2] == cube->up.s[2][2] && cube->up.s[2][1] == cube->up.s[2][2] && cube->up.s[2][3] == cube->up.s[2][2] && cube->up.s[3][2] == cube->up.s[2][2]) { right_clock(cube, 1); up_clock(cube, 2); right_clock(cube, 2); up_anticlock(cube, 1); right_clock(cube, 2); up_anticlock(cube, 1); right_clock(cube, 2); up_anticlock(cube, 2); right_clock(cube, 1); } //OLL38 else if (cube->right.s[1][3] == cube->up.s[2][2] && cube->right.s[1][2] == cube->up.s[2][2] && cube->right.s[1][1] == cube->up.s[2][2] && cube->front.s[1][2] == cube->up.s[2][2] && cube->up.s[1][2] == cube->up.s[2][2] && cube->up.s[2][1] == cube->up.s[2][2] && cube->up.s[1][1] == cube->up.s[2][2] && cube->up.s[3][1] == cube->up.s[2][2]) { front_clock(cube, 1); up_clock(cube, 1); right_clock(cube, 1); up_anticlock(cube, 1); right_anticlock(cube, 1); front_anticlock(cube, 1); } //OLL39 else if (cube->back.s[1][2] == cube->up.s[2][2] && cube->right.s[1][3] == cube->up.s[2][2] && cube->right.s[1][2] == cube->up.s[2][2] && cube->right.s[1][1] == cube->up.s[2][2] && cube->up.s[3][2] == cube->up.s[2][2] && cube->up.s[2][1] == cube->up.s[2][2] && cube->up.s[1][1] == cube->up.s[2][2] && cube->up.s[3][1] == cube->up.s[2][2]) { back_anticlock(cube, 1); up_anticlock(cube, 1); right_anticlock(cube, 1); up_clock(cube, 1); right_clock(cube, 1); back_clock(cube, 1); } //OLL40 else if (cube->back.s[1][2] == cube->up.s[2][2] && cube->right.s[1][3] == cube->up.s[2][2] && cube->front.s[1][1] == cube->up.s[2][2] && cube->left.s[1][2] == cube->up.s[2][2] && cube->up.s[1][1] == cube->up.s[2][2] && cube->up.s[2][3] == cube->up.s[2][2] && cube->up.s[3][2] == cube->up.s[2][2] && cube->up.s[3][3] == cube->up.s[2][2]) { right_clock(cube, 1); up_anticlock(cube, 2); right_clock(cube, 2); front_clock(cube, 1); right_clock(cube, 1); front_anticlock(cube, 1); right_clock(cube, 1); up_clock(cube, 2); right_anticlock(cube, 1); } //OLL41 else if (cube->back.s[1][2] == cube->up.s[2][2] && cube->front.s[1][2] == cube->up.s[2][2] && cube->left.s[1][1] == cube->up.s[2][2] && cube->left.s[1][3] == cube->up.s[2][2] && cube->up.s[1][3] == cube->up.s[2][2] && cube->up.s[2][1] == cube->up.s[2][2] && cube->up.s[2][3] == cube->up.s[2][2] && cube->up.s[3][3] == cube->up.s[2][2]) { front_clock(cube, 1); right_clock(cube, 1); up_clock(cube, 1); right_anticlock(cube, 1); up_anticlock(cube, 1); front_anticlock(cube, 1); } //OLL42 else if (cube->back.s[1][3] == cube->up.s[2][2] && cube->back.s[1][2] == cube->up.s[2][2] && cube->front.s[1][1] == cube->up.s[2][2] && cube->front.s[1][2] == cube->up.s[2][2] && cube->up.s[1][3] == cube->up.s[2][2] && cube->up.s[2][1] == cube->up.s[2][2] && cube->up.s[2][3] == cube->up.s[2][2] && cube->up.s[3][3] == cube->up.s[2][2]) { right_clock(cube, 1); up_clock(cube, 1); right_anticlock(cube, 1); up_anticlock(cube, 1); right_anticlock(cube, 1); front_clock(cube, 1); right_clock(cube, 1); front_anticlock(cube, 1); } //OLL43 else if (cube->back.s[1][2] == cube->up.s[2][2] && cube->front.s[1][2] == cube->up.s[2][2] && cube->front.s[1][3] == cube->up.s[2][2] && cube->left.s[1][1] == cube->up.s[2][2] && cube->up.s[1][3] == cube->up.s[2][2] && cube->up.s[2][1] == cube->up.s[2][2] && cube->up.s[2][3] == cube->up.s[2][2] && cube->up.s[3][1] == cube->up.s[2][2]) { right_clock(cube, 1); back_anticlock(cube, 1); right_anticlock(cube, 1); up_anticlock(cube, 1); right_clock(cube, 1); up_clock(cube, 1); back_clock(cube, 1); up_anticlock(cube, 1); right_anticlock(cube, 1); } //OLL44 else if (cube->back.s[1][2] == cube->up.s[2][2] && cube->back.s[1][1] == cube->up.s[2][2] && cube->front.s[1][2] == cube->up.s[2][2] && cube->left.s[1][3] == cube->up.s[2][2] && cube->up.s[1][1] == cube->up.s[2][2] && cube->up.s[2][1] == cube->up.s[2][2] && cube->up.s[2][3] == cube->up.s[2][2] && cube->up.s[3][3] == cube->up.s[2][2]) { right_anticlock(cube, 1); front_clock(cube, 1); right_clock(cube, 1); up_clock(cube, 1); right_anticlock(cube, 1); up_anticlock(cube, 1); front_anticlock(cube, 1); up_clock(cube, 1); right_clock(cube, 1); } //OLL45 else if (cube->back.s[1][2] == cube->up.s[2][2] && cube->right.s[1][1] == cube->up.s[2][2] && cube->front.s[1][2] == cube->up.s[2][2] && cube->left.s[1][3] == cube->up.s[2][2] && cube->up.s[1][1] == cube->up.s[2][2] && cube->up.s[2][1] == cube->up.s[2][2] && cube->up.s[2][3] == cube->up.s[2][2] && cube->up.s[1][3] == cube->up.s[2][2]) { right_anticlock(cube, 1); up_anticlock(cube, 1); right_clock(cube, 1); up_clock(cube, 1); front_clock(cube, 1); right_clock(cube, 1); back_anticlock(cube, 1); right_anticlock(cube, 1); front_anticlock(cube, 1); back_clock(cube, 1); } //OLL46 else if (cube->right.s[1][3] == cube->up.s[2][2] && cube->right.s[1][2] == cube->up.s[2][2] && cube->right.s[1][1] == cube->up.s[2][2] && cube->left.s[1][2] == cube->up.s[2][2] && cube->up.s[1][1] == cube->up.s[2][2] && cube->up.s[1][2] == cube->up.s[2][2] && cube->up.s[3][1] == cube->up.s[2][2] && cube->up.s[3][2] == cube->up.s[2][2]) { right_anticlock(cube, 1); up_anticlock(cube, 1); right_anticlock(cube, 1); front_clock(cube, 1); right_clock(cube, 1); front_anticlock(cube, 1); up_clock(cube, 1); right_clock(cube, 1); } //OLL47 else if (cube->back.s[1][3] == cube->up.s[2][2] && cube->right.s[1][2] == cube->up.s[2][2] && cube->right.s[1][1] == cube->up.s[2][2] && cube->front.s[1][2] == cube->up.s[2][2] && cube->up.s[1][2] == cube->up.s[2][2] && cube->up.s[1][3] == cube->up.s[2][2] && cube->up.s[2][1] == cube->up.s[2][2] && cube->up.s[3][1] == cube->up.s[2][2]) { right_clock(cube, 1); up_clock(cube, 1); right_anticlock(cube, 1); up_clock(cube, 1); right_clock(cube, 1); up_anticlock(cube, 1); right_anticlock(cube, 1); up_anticlock(cube, 1); right_anticlock(cube, 1); front_clock(cube, 1); right_clock(cube, 1); front_anticlock(cube, 1); } //OLL48 else if (cube->back.s[1][2] == cube->up.s[2][2] && cube->right.s[1][3] == cube->up.s[2][2] && cube->right.s[1][2] == cube->up.s[2][2] && cube->front.s[1][1] == cube->up.s[2][2] && cube->up.s[1][1] == cube->up.s[2][2] && cube->up.s[2][1] == cube->up.s[2][2] && cube->up.s[3][2] == cube->up.s[2][2] && cube->up.s[3][3] == cube->up.s[2][2]) { right_anticlock(cube, 1); up_anticlock(cube, 1); right_clock(cube, 1); up_anticlock(cube, 1); right_anticlock(cube, 1); up_clock(cube, 1); right_clock(cube, 1); up_clock(cube, 1); right_clock(cube, 1); back_anticlock(cube, 1); right_anticlock(cube, 1); back_clock(cube, 1); } //OLL49 else if (cube->back.s[1][3] == cube->up.s[2][2] && cube->front.s[1][1] == cube->up.s[2][2] && cube->front.s[1][2] == cube->up.s[2][2] && cube->left.s[1][2] == cube->up.s[2][2] && cube->up.s[1][2] == cube->up.s[2][2] && cube->up.s[1][3] == cube->up.s[2][2] && cube->up.s[2][3] == cube->up.s[2][2] && cube->up.s[3][3] == cube->up.s[2][2]) { right_anticlock(cube, 1); up_anticlock(cube, 1); front_clock(cube, 1); up_clock(cube, 1); right_clock(cube, 1); up_anticlock(cube, 1); right_anticlock(cube, 1); front_anticlock(cube, 1); right_clock(cube, 1); } //OLL50 else if (cube->right.s[1][3] == cube->up.s[2][2] && cube->right.s[1][2] == cube->up.s[2][2] && cube->front.s[1][1] == cube->up.s[2][2] && cube->front.s[1][2] == cube->up.s[2][2] && cube->up.s[1][1] == cube->up.s[2][2] && cube->up.s[1][2] == cube->up.s[2][2] && cube->up.s[2][1] == cube->up.s[2][2] && cube->up.s[3][3] == cube->up.s[2][2]) { front_clock(cube, 1); right_clock(cube, 1); up_anticlock(cube, 1); right_anticlock(cube, 1); up_anticlock(cube, 1); right_clock(cube, 1); up_clock(cube, 1); right_anticlock(cube, 1); front_anticlock(cube, 1); } //OLL51 else if (cube->back.s[1][3] == cube->up.s[2][2] && cube->back.s[1][1] == cube->up.s[2][2] && cube->right.s[1][2] == cube->up.s[2][2] && cube->front.s[1][2] == cube->up.s[2][2] && cube->up.s[1][2] == cube->up.s[2][2] && cube->up.s[2][1] == cube->up.s[2][2] && cube->up.s[3][1] == cube->up.s[2][2] && cube->up.s[3][3] == cube->up.s[2][2]) { right_clock(cube, 1); up_clock(cube, 1); right_anticlock(cube, 1); up_clock(cube, 1); right_clock(cube, 1); up_anticlock(cube, 2); right_anticlock(cube, 1); front_clock(cube, 1); right_clock(cube, 1); up_clock(cube, 1); right_anticlock(cube, 1); up_anticlock(cube, 1); front_anticlock(cube, 1); } //OLL52 else if (cube->back.s[1][2] == cube->up.s[2][2] && cube->right.s[1][2] == cube->up.s[2][2] && cube->front.s[1][1] == cube->up.s[2][2] && cube->front.s[1][3] == cube->up.s[2][2] && cube->up.s[1][1] == cube->up.s[2][2] && cube->up.s[1][3] == cube->up.s[2][2] && cube->up.s[2][1] == cube->up.s[2][2] && cube->up.s[3][2] == cube->up.s[2][2]) { right_anticlock(cube, 1); up_anticlock(cube, 1); right_clock(cube, 1); up_clock(cube, 1); front_clock(cube, 1); right_clock(cube, 1); up_clock(cube, 1); right_anticlock(cube, 1); up_anticlock(cube, 1); right_anticlock(cube, 1); up_clock(cube, 1); right_clock(cube, 1); up_anticlock(cube, 1); front_anticlock(cube, 1); } //OLL53 else if (cube->back.s[1][2] == cube->up.s[2][2] && cube->right.s[1][1] == cube->up.s[2][2] && cube->left.s[1][2] == cube->up.s[2][2] && cube->left.s[1][3] == cube->up.s[2][2] && cube->up.s[1][1] == cube->up.s[2][2] && cube->up.s[1][3] == cube->up.s[2][2] && cube->up.s[2][3] == cube->up.s[2][2] && cube->up.s[3][2] == cube->up.s[2][2]) { right_clock(cube, 2); up_clock(cube, 1); right_anticlock(cube, 1); back_anticlock(cube, 1); right_clock(cube, 1); up_anticlock(cube, 1); right_clock(cube, 2); up_clock(cube, 1); right_clock(cube, 1); back_clock(cube, 1); right_anticlock(cube, 1); } //OLL54 else if (cube->back.s[1][3] == cube->up.s[2][2] && cube->right.s[1][2] == cube->up.s[2][2] && cube->front.s[1][1] == cube->up.s[2][2] && cube->front.s[1][2] == cube->up.s[2][2] && cube->up.s[1][2] == cube->up.s[2][2] && cube->up.s[1][3] == cube->up.s[2][2] && cube->up.s[2][1] == cube->up.s[2][2] && cube->up.s[3][3] == cube->up.s[2][2]) { right_clock(cube, 1); up_clock(cube, 1); right_anticlock(cube, 1); up_anticlock(cube, 1); right_clock(cube, 1); up_anticlock(cube, 1); right_anticlock(cube, 1); front_anticlock(cube, 1); up_anticlock(cube, 1); front_clock(cube, 1); right_clock(cube, 1); up_clock(cube, 1); right_anticlock(cube, 1); } //OLL55 else if (cube->back.s[1][3] == cube->up.s[2][2] && cube->back.s[1][2] == cube->up.s[2][2] && cube->front.s[1][1] == cube->up.s[2][2] && cube->left.s[1][2] == cube->up.s[2][2] && cube->up.s[1][3] == cube->up.s[2][2] && cube->up.s[2][3] == cube->up.s[2][2] && cube->up.s[3][2] == cube->up.s[2][2] && cube->up.s[3][3] == cube->up.s[2][2]) { right_clock(cube, 1); up_clock(cube, 1); back_anticlock(cube, 1); up_anticlock(cube, 1); right_anticlock(cube, 1); up_clock(cube, 1); right_clock(cube, 1); back_clock(cube, 1); right_anticlock(cube, 1); } //OLL56 else if (cube->right.s[1][2] == cube->up.s[2][2] && cube->front.s[1][2] == cube->up.s[2][2] && cube->up.s[1][1] == cube->up.s[2][2] && cube->up.s[1][2] == cube->up.s[2][2] && cube->up.s[1][3] == cube->up.s[2][2] && cube->up.s[2][1] == cube->up.s[2][2] && cube->up.s[3][1] == cube->up.s[2][2] && cube->up.s[3][3] == cube->up.s[2][2]) { left_clock(cube, 1); front_clock(cube, 1); right_anticlock(cube, 1); front_anticlock(cube, 1); left_anticlock(cube, 1); right_clock(cube, 1); up_clock(cube, 1); right_clock(cube, 1); up_anticlock(cube, 1); right_anticlock(cube, 1); } //OLL57 else if (cube->back.s[1][2] == cube->up.s[2][2] && cube->front.s[1][2] == cube->up.s[2][2] && cube->up.s[1][1] == cube->up.s[2][2] && cube->up.s[1][3] == cube->up.s[2][2] && cube->up.s[2][1] == cube->up.s[2][2] && cube->up.s[2][3] == cube->up.s[2][2] && cube->up.s[3][1] == cube->up.s[2][2] && cube->up.s[3][3] == cube->up.s[2][2]) { right_clock(cube, 1); up_clock(cube, 1); right_anticlock(cube, 1); up_anticlock(cube, 1); left_clock(cube, 1); right_anticlock(cube, 1); front_clock(cube, 1); right_clock(cube, 1); front_anticlock(cube, 1); left_anticlock(cube, 1); } else up_clock(cube, 1); }}/*** brief:PLL顶层,排列调整21种情况*/void cfop_pll( Cube *cube ){ int flag_pll = 0; while (!(cube->front.s[1][1] == cube->front.s[2][2] && cube->front.s[1][2] == cube->front.s[2][2] && cube->front.s[1][3] == cube->front.s[2][2] && cube->right.s[1][3] == cube->right.s[2][2] && cube->right.s[1][2] == cube->right.s[2][2] && cube->right.s[1][1] == cube->right.s[2][2] && cube->back.s[1][3] == cube->back.s[2][2] && cube->back.s[1][2] == cube->back.s[2][2] && cube->back.s[1][1] == cube->back.s[2][2] && cube->left.s[1][1] == cube->left.s[2][2] && cube->left.s[1][2] == cube->left.s[2][2] && cube->left.s[1][3] == cube->left.s[2][2])) { //PLL1 if (cube->back.s[1][3] == cube->back.s[2][2] && cube->back.s[1][2] == cube->back.s[2][2] && cube->back.s[1][1] == cube->back.s[2][2] && cube->right.s[1][3] == cube->right.s[2][2] && cube->right.s[1][2] == cube->left.s[2][2] && cube->right.s[1][1] == cube->right.s[2][2] && cube->front.s[1][1] == cube->front.s[2][2] && cube->front.s[1][2] == cube->right.s[2][2] && cube->front.s[1][3] == cube->front.s[2][2] && cube->left.s[1][1] == cube->left.s[2][2] && cube->left.s[1][2] == cube->front.s[2][2] && cube->left.s[1][3] == cube->left.s[2][2]) { right_clock(cube, 1); up_anticlock(cube, 1); right_clock(cube, 1); up_clock(cube, 1); right_clock(cube, 1); up_clock(cube, 1); right_clock(cube, 1); up_anticlock(cube, 1); right_anticlock(cube, 1); up_anticlock(cube, 1); right_clock(cube, 2); } //PLL2 else if (cube->back.s[1][3] == cube->back.s[2][2] && cube->back.s[1][2] == cube->back.s[2][2] && cube->back.s[1][1] == cube->back.s[2][2] && cube->right.s[1][3] == cube->right.s[2][2] && cube->right.s[1][2] == cube->front.s[2][2] && cube->right.s[1][1] == cube->right.s[2][2] && cube->front.s[1][1] == cube->front.s[2][2] && cube->front.s[1][2] == cube->left.s[2][2] && cube->front.s[1][3] == cube->front.s[2][2] && cube->left.s[1][1] == cube->left.s[2][2] && cube->left.s[1][2] == cube->right.s[2][2] && cube->left.s[1][3] == cube->left.s[2][2]) { right_clock(cube, 2); up_clock(cube, 1); right_clock(cube, 1); up_clock(cube, 1); right_anticlock(cube, 1); up_anticlock(cube, 1); right_anticlock(cube, 1); up_anticlock(cube, 1); right_anticlock(cube, 1); up_clock(cube, 1); right_anticlock(cube, 1); } //PLL3 else if (cube->back.s[1][3] == cube->back.s[2][2] && cube->back.s[1][1] == cube->back.s[2][2] && cube->right.s[1][3] == cube->right.s[2][2] && cube->right.s[1][1] == cube->right.s[2][2] && cube->front.s[1][1] == cube->front.s[2][2] && cube->front.s[1][3] == cube->front.s[2][2] && cube->left.s[1][1] == cube->left.s[2][2] && cube->left.s[1][3] == cube->left.s[2][2] && cube->right.s[1][2] == cube->left.s[2][2] && cube->front.s[1][2] == cube->back.s[2][2] && cube->left.s[1][2] == cube->right.s[2][2] && cube->back.s[1][2] == cube->front.s[2][2]) { right_clock(cube, 2); left_clock(cube, 2); down_clock(cube, 1); right_clock(cube, 2); left_clock(cube, 2); down_clock(cube, 2); right_clock(cube, 2); left_clock(cube, 2); down_clock(cube, 1); right_clock(cube, 2); left_clock(cube, 2); } //PLL4 else if (cube->back.s[1][3] == cube->back.s[2][2] && cube->back.s[1][1] == cube->back.s[2][2] && cube->right.s[1][3] == cube->right.s[2][2] && cube->right.s[1][1] == cube->right.s[2][2] && cube->front.s[1][1] == cube->front.s[2][2] && cube->front.s[1][3] == cube->front.s[2][2] && cube->left.s[1][1] == cube->left.s[2][2] && cube->left.s[1][3] == cube->left.s[2][2] && cube->right.s[1][2] == cube->front.s[2][2] && cube->front.s[1][2] == cube->right.s[2][2] && cube->left.s[1][2] == cube->back.s[2][2] && cube->back.s[1][2] == cube->left.s[2][2]) { up_clock(cube, 1); right_anticlock(cube, 1); up_anticlock(cube, 1); right_clock(cube, 1); up_anticlock(cube, 1); right_clock(cube, 1); up_clock(cube, 1); right_clock(cube, 1); up_anticlock(cube, 1); right_clock(cube, 1); up_clock(cube, 1); right_clock(cube, 1); up_clock(cube, 1); right_clock(cube, 2); up_anticlock(cube, 1); right_anticlock(cube, 1); up_clock(cube, 1); } //PLL5 else if (cube->back.s[1][3] == cube->back.s[2][2] && cube->back.s[1][2] == cube->back.s[2][2] && cube->back.s[1][1] == cube->right.s[2][2] && cube->right.s[1][3] == cube->front.s[2][2] && cube->right.s[1][2] == cube->right.s[2][2] && cube->right.s[1][1] == cube->front.s[2][2] && cube->front.s[1][1] == cube->back.s[2][2] && cube->front.s[1][2] == cube->front.s[2][2] && cube->front.s[1][3] == cube->left.s[2][2] && cube->left.s[1][1] == cube->left.s[2][2] && cube->left.s[1][2] == cube->left.s[2][2] && cube->left.s[1][3] == cube->right.s[2][2]) { right_clock(cube, 2); front_clock(cube, 2); right_anticlock(cube, 1); back_anticlock(cube, 1); right_clock(cube, 1); front_clock(cube, 2); right_anticlock(cube, 1); back_clock(cube, 1); right_anticlock(cube, 1); } //PLL6 else if (cube->back.s[1][3] == cube->back.s[2][2] && cube->back.s[1][2] == cube->back.s[2][2] && cube->back.s[1][1] == cube->front.s[2][2] && cube->right.s[1][3] == cube->left.s[2][2] && cube->right.s[1][2] == cube->right.s[2][2] && cube->right.s[1][1] == cube->back.s[2][2] && cube->front.s[1][1] == cube->right.s[2][2] && cube->front.s[1][2] == cube->front.s[2][2] && cube->front.s[1][3] == cube->right.s[2][2] && cube->left.s[1][1] == cube->left.s[2][2] && cube->left.s[1][2] == cube->left.s[2][2] && cube->left.s[1][3] == cube->front.s[2][2]) { right_clock(cube, 1); back_anticlock(cube, 1); right_clock(cube, 1); front_clock(cube, 2); right_anticlock(cube, 1); back_clock(cube, 1); right_clock(cube, 1); front_clock(cube, 2); right_clock(cube, 2); } //PLL7 else if (cube->back.s[1][3] == cube->left.s[2][2] && cube->back.s[1][2] == cube->back.s[2][2] && cube->back.s[1][1] == cube->right.s[2][2] && cube->right.s[1][3] == cube->front.s[2][2] && cube->right.s[1][2] == cube->right.s[2][2] && cube->right.s[1][1] == cube->back.s[2][2] && cube->front.s[1][1] == cube->left.s[2][2] && cube->front.s[1][2] == cube->front.s[2][2] && cube->front.s[1][3] == cube->right.s[2][2] && cube->left.s[1][1] == cube->front.s[2][2] && cube->left.s[1][2] == cube->left.s[2][2] && cube->left.s[1][3] == cube->back.s[2][2]) { right_clock(cube, 1); back_anticlock(cube, 1); right_anticlock(cube, 1); front_clock(cube, 1); right_clock(cube, 1); back_clock(cube, 1); right_anticlock(cube, 1); front_clock(cube, 2); left_anticlock(cube, 1); back_clock(cube, 1); left_clock(cube, 1); front_clock(cube, 1); left_anticlock(cube, 1); back_anticlock(cube, 1); left_clock(cube, 1); } //PLL8 else if (cube->back.s[1][3] == cube->back.s[2][2] && cube->back.s[1][2] == cube->back.s[2][2] && cube->back.s[1][1] == cube->right.s[2][2] && cube->right.s[1][3] == cube->front.s[2][2] && cube->right.s[1][2] == cube->left.s[2][2] && cube->right.s[1][1] == cube->back.s[2][2] && cube->front.s[1][1] == cube->front.s[2][2] && cube->front.s[1][2] == cube->front.s[2][2] && cube->front.s[1][3] == cube->right.s[2][2] && cube->left.s[1][1] == cube->left.s[2][2] && cube->left.s[1][2] == cube->right.s[2][2] && cube->left.s[1][3] == cube->left.s[2][2]) { right_clock(cube, 1); up_clock(cube, 1); right_anticlock(cube, 1); up_anticlock(cube, 1); right_anticlock(cube, 1); front_clock(cube, 1); right_clock(cube, 2); up_anticlock(cube, 1); right_anticlock(cube, 1); up_anticlock(cube, 1); right_clock(cube, 1); up_clock(cube, 1); right_anticlock(cube, 1); front_anticlock(cube, 1); } //PLL9 else if (cube->back.s[1][3] == cube->back.s[2][2] && cube->back.s[1][2] == cube->front.s[2][2] && cube->back.s[1][1] == cube->right.s[2][2] && cube->right.s[1][3] == cube->front.s[2][2] && cube->right.s[1][2] == cube->right.s[2][2] && cube->right.s[1][1] == cube->back.s[2][2] && cube->front.s[1][1] == cube->front.s[2][2] && cube->front.s[1][2] == cube->back.s[2][2] && cube->front.s[1][3] == cube->right.s[2][2] && cube->left.s[1][1] == cube->left.s[2][2] && cube->left.s[1][2] == cube->left.s[2][2] && cube->left.s[1][3] == cube->left.s[2][2]) { up_anticlock(cube, 1); right_anticlock(cube, 1); up_clock(cube, 1); right_clock(cube, 1); up_anticlock(cube, 1); right_clock(cube, 2); front_anticlock(cube, 1); up_anticlock(cube, 1); front_clock(cube, 1); up_clock(cube, 1); right_clock(cube, 1); front_clock(cube, 1); right_anticlock(cube, 1); front_anticlock(cube, 1); right_clock(cube, 2); } //PLL10 else if (cube->back.s[1][3] == cube->front.s[2][2] && cube->back.s[1][2] == cube->right.s[2][2] && cube->back.s[1][1] == cube->back.s[2][2] && cube->right.s[1][3] == cube->right.s[2][2] && cube->right.s[1][2] == cube->back.s[2][2] && cube->right.s[1][1] == cube->left.s[2][2] && cube->front.s[1][1] == cube->front.s[2][2] && cube->front.s[1][2] == cube->front.s[2][2] && cube->front.s[1][3] == cube->back.s[2][2] && cube->left.s[1][1] == cube->right.s[2][2] && cube->left.s[1][2] == cube->left.s[2][2] && cube->left.s[1][3] == cube->left.s[2][2]) { right_anticlock(cube, 1); up_clock(cube, 1); right_anticlock(cube, 1); up_anticlock(cube, 1); back_anticlock(cube, 1); down_clock(cube, 1); back_anticlock(cube, 1); down_anticlock(cube, 1); back_clock(cube, 2); right_anticlock(cube, 1); back_anticlock(cube, 1); right_clock(cube, 1); back_clock(cube, 1); right_clock(cube, 1); } //PLL11 else if (cube->back.s[1][3] == cube->front.s[2][2] && cube->back.s[1][2] == cube->left.s[2][2] && cube->back.s[1][1] == cube->back.s[2][2] && cube->right.s[1][3] == cube->right.s[2][2] && cube->right.s[1][2] == cube->right.s[2][2] && cube->right.s[1][1] == cube->left.s[2][2] && cube->front.s[1][1] == cube->front.s[2][2] && cube->front.s[1][2] == cube->front.s[2][2] && cube->front.s[1][3] == cube->back.s[2][2] && cube->left.s[1][1] == cube->right.s[2][2] && cube->left.s[1][2] == cube->back.s[2][2] && cube->left.s[1][3] == cube->left.s[2][2]) { front_clock(cube, 1); right_clock(cube, 1); up_anticlock(cube, 1); right_anticlock(cube, 1); up_anticlock(cube, 1); right_clock(cube, 1); up_clock(cube, 1); right_anticlock(cube, 1); front_anticlock(cube, 1); right_clock(cube, 1); up_clock(cube, 1); right_anticlock(cube, 1); up_anticlock(cube, 1); right_anticlock(cube, 1); front_clock(cube, 1); right_clock(cube, 1); front_anticlock(cube, 1); } //PLL12 else if (cube->back.s[1][3] == cube->back.s[2][2] && cube->back.s[1][2] == cube->back.s[2][2] && cube->back.s[1][1] == cube->back.s[2][2] && cube->right.s[1][3] == cube->right.s[2][2] && cube->right.s[1][2] == cube->front.s[2][2] && cube->right.s[1][1] == cube->front.s[2][2] && cube->front.s[1][1] == cube->right.s[2][2] && cube->front.s[1][2] == cube->right.s[2][2] && cube->front.s[1][3] == cube->left.s[2][2] && cube->left.s[1][1] == cube->left.s[2][2] && cube->left.s[1][2] == cube->left.s[2][2] && cube->left.s[1][3] == cube->front.s[2][2]) { left_anticlock(cube, 1); up_clock(cube, 1); right_anticlock(cube, 1); up_clock(cube, 2); left_clock(cube, 1); up_anticlock(cube, 1); left_anticlock(cube, 1); up_clock(cube, 2); left_clock(cube, 1); right_clock(cube, 1); up_anticlock(cube, 1); } //PLL13 else if (cube->back.s[1][3] == cube->back.s[2][2] && cube->back.s[1][2] == cube->back.s[2][2] && cube->back.s[1][1] == cube->right.s[2][2] && cube->right.s[1][3] == cube->front.s[2][2] && cube->right.s[1][2] == cube->front.s[2][2] && cube->right.s[1][1] == cube->back.s[2][2] && cube->front.s[1][1] == cube->front.s[2][2] && cube->front.s[1][2] == cube->right.s[2][2] && cube->front.s[1][3] == cube->right.s[2][2] && cube->left.s[1][1] == cube->left.s[2][2] && cube->left.s[1][2] == cube->left.s[2][2] && cube->left.s[1][3] == cube->left.s[2][2]) { right_clock(cube, 1); up_clock(cube, 1); right_anticlock(cube, 1); front_anticlock(cube, 1); right_clock(cube, 1); up_clock(cube, 1); right_anticlock(cube, 1); up_anticlock(cube, 1); right_anticlock(cube, 1); front_clock(cube, 1); right_clock(cube, 2); up_anticlock(cube, 1); right_anticlock(cube, 1); up_anticlock(cube, 1); } //PLL14 else if (cube->back.s[1][3] == cube->right.s[2][2] && cube->back.s[1][2] == cube->back.s[2][2] && cube->back.s[1][1] == cube->left.s[2][2] && cube->right.s[1][3] == cube->back.s[2][2] && cube->right.s[1][2] == cube->front.s[2][2] && cube->right.s[1][1] == cube->right.s[2][2] && cube->front.s[1][1] == cube->front.s[2][2] && cube->front.s[1][2] == cube->right.s[2][2] && cube->front.s[1][3] == cube->front.s[2][2] && cube->left.s[1][1] == cube->back.s[2][2] && cube->left.s[1][2] == cube->left.s[2][2] && cube->left.s[1][3] == cube->left.s[2][2]) { right_anticlock(cube, 1); up_clock(cube, 2); right_clock(cube, 1); up_clock(cube, 2); right_anticlock(cube, 1); front_clock(cube, 1); right_clock(cube, 1); up_clock(cube, 1); right_anticlock(cube, 1); up_anticlock(cube, 1); right_anticlock(cube, 1); front_anticlock(cube, 1); right_clock(cube, 2); up_anticlock(cube, 1); } //PLL15 else if (cube->back.s[1][3] == cube->back.s[2][2] && cube->back.s[1][2] == cube->right.s[2][2] && cube->back.s[1][1] == cube->back.s[2][2] && cube->right.s[1][3] == cube->right.s[2][2] && cube->right.s[1][2] == cube->back.s[2][2] && cube->right.s[1][1] == cube->front.s[2][2] && cube->front.s[1][1] == cube->right.s[2][2] && cube->front.s[1][2] == cube->front.s[2][2] && cube->front.s[1][3] == cube->left.s[2][2] && cube->left.s[1][1] == cube->left.s[2][2] && cube->left.s[1][2] == cube->left.s[2][2] && cube->left.s[1][3] == cube->front.s[2][2]) { right_clock(cube, 1); up_clock(cube, 2); right_anticlock(cube, 1); up_clock(cube, 2); right_clock(cube, 1); back_anticlock(cube, 1); right_anticlock(cube, 1); up_anticlock(cube, 1); right_clock(cube, 1); up_clock(cube, 1); right_clock(cube, 1); back_clock(cube, 1); right_clock(cube, 2); up_clock(cube, 1); } //PLL16 else if (cube->back.s[1][3] == cube->left.s[2][2] && cube->back.s[1][2] == cube->back.s[2][2] && cube->back.s[1][1] == cube->back.s[2][2] && cube->right.s[1][3] == cube->right.s[2][2] && cube->right.s[1][2] == cube->front.s[2][2] && cube->right.s[1][1] == cube->left.s[2][2] && cube->front.s[1][1] == cube->right.s[2][2] && cube->front.s[1][2] == cube->left.s[2][2] && cube->front.s[1][3] == cube->back.s[2][2] && cube->left.s[1][1] == cube->front.s[2][2] && cube->left.s[1][2] == cube->right.s[2][2] && cube->left.s[1][3] == cube->front.s[2][2]) { right_clock(cube, 2); down_anticlock(cube, 1); front_clock(cube, 1); up_anticlock(cube, 1); front_clock(cube, 1); up_clock(cube, 1); front_anticlock(cube, 1); down_clock(cube, 1); right_clock(cube, 2); back_clock(cube, 1); up_anticlock(cube, 1); back_anticlock(cube, 1); } //PLL17 else if (cube->back.s[1][3] == cube->right.s[2][2] && cube->back.s[1][2] == cube->left.s[2][2] && cube->back.s[1][1] == cube->front.s[2][2] && cube->right.s[1][3] == cube->left.s[2][2] && cube->right.s[1][2] == cube->right.s[2][2] && cube->right.s[1][1] == cube->right.s[2][2] && cube->front.s[1][1] == cube->left.s[2][2] && cube->front.s[1][2] == cube->back.s[2][2] && cube->front.s[1][3] == cube->front.s[2][2] && cube->left.s[1][1] == cube->back.s[2][2] && cube->left.s[1][2] == cube->front.s[2][2] && cube->left.s[1][3] == cube->back.s[2][2]) { right_clock(cube, 1); up_clock(cube, 1); right_anticlock(cube, 1); front_clock(cube, 2); down_anticlock(cube, 1); left_clock(cube, 1); up_anticlock(cube, 1); left_anticlock(cube, 1); up_clock(cube, 1); left_anticlock(cube, 1); down_clock(cube, 1); front_clock(cube, 2); } //PLL18 else if (cube->back.s[1][3] == cube->right.s[2][2] && cube->back.s[1][2] == cube->left.s[2][2] && cube->back.s[1][1] == cube->front.s[2][2] && cube->right.s[1][3] == cube->left.s[2][2] && cube->right.s[1][2] == cube->back.s[2][2] && cube->right.s[1][1] == cube->right.s[2][2] && cube->front.s[1][1] == cube->left.s[2][2] && cube->front.s[1][2] == cube->front.s[2][2] && cube->front.s[1][3] == cube->front.s[2][2] && cube->left.s[1][1] == cube->back.s[2][2] && cube->left.s[1][2] == cube->right.s[2][2] && cube->left.s[1][3] == cube->back.s[2][2]) { right_clock(cube, 2); down_clock(cube, 1); back_anticlock(cube, 1); up_clock(cube, 1); back_anticlock(cube, 1); up_anticlock(cube, 1); back_clock(cube, 1); down_anticlock(cube, 1); right_clock(cube, 2); front_anticlock(cube, 1); up_clock(cube, 1); front_clock(cube, 1); } //PLL19 else if (cube->back.s[1][3] == cube->right.s[2][2] && cube->back.s[1][2] == cube->front.s[2][2] && cube->back.s[1][1] == cube->back.s[2][2] && cube->right.s[1][3] == cube->right.s[2][2] && cube->right.s[1][2] == cube->right.s[2][2] && cube->right.s[1][1] == cube->left.s[2][2] && cube->front.s[1][1] == cube->right.s[2][2] && cube->front.s[1][2] == cube->left.s[2][2] && cube->front.s[1][3] == cube->back.s[2][2] && cube->left.s[1][1] == cube->front.s[2][2] && cube->left.s[1][2] == cube->back.s[2][2] && cube->left.s[1][3] == cube->front.s[2][2]) { right_anticlock(cube, 1); up_anticlock(cube, 1); right_clock(cube, 1); back_clock(cube, 2); down_clock(cube, 1); left_anticlock(cube, 1); up_anticlock(cube, 1); left_clock(cube, 1); up_anticlock(cube, 1); left_clock(cube, 1); down_anticlock(cube, 1); back_clock(cube, 2); } //PLL20 else if (cube->back.s[1][3] == cube->front.s[2][2] && cube->back.s[1][2] == cube->front.s[2][2] && cube->back.s[1][1] == cube->back.s[2][2] && cube->right.s[1][3] == cube->right.s[2][2] && cube->right.s[1][2] == cube->right.s[2][2] && cube->right.s[1][1] == cube->left.s[2][2] && cube->front.s[1][1] == cube->front.s[2][2] && cube->front.s[1][2] == cube->back.s[2][2] && cube->front.s[1][3] == cube->back.s[2][2] && cube->left.s[1][1] == cube->right.s[2][2] && cube->left.s[1][2] == cube->left.s[2][2] && cube->left.s[1][3] == cube->left.s[2][2]) { up_anticlock(cube, 1); left_clock(cube, 1); up_anticlock(cube, 1); right_clock(cube, 1); up_clock(cube, 2); left_anticlock(cube, 1); up_clock(cube, 1); right_anticlock(cube, 1); left_clock(cube, 1); up_anticlock(cube, 1); right_clock(cube, 1); up_clock(cube, 2); left_anticlock(cube, 1); up_clock(cube, 1); right_anticlock(cube, 1); } //PLL21 else if (cube->back.s[1][3] == cube->back.s[2][2] && cube->back.s[1][2] == cube->front.s[2][2] && cube->back.s[1][1] == cube->front.s[2][2] && cube->right.s[1][3] == cube->left.s[2][2] && cube->right.s[1][2] == cube->right.s[2][2] && cube->right.s[1][1] == cube->right.s[2][2] && cube->front.s[1][1] == cube->back.s[2][2] && cube->front.s[1][2] == cube->back.s[2][2] && cube->front.s[1][3] == cube->front.s[2][2] && cube->left.s[1][1] == cube->left.s[2][2] && cube->left.s[1][2] == cube->left.s[2][2] && cube->left.s[1][3] == cube->right.s[2][2]) { left_anticlock(cube, 1); up_clock(cube, 1); right_anticlock(cube, 1); up_clock(cube, 2); left_clock(cube, 1); up_anticlock(cube, 1); left_anticlock(cube, 1); right_clock(cube, 1); up_clock(cube, 1); right_anticlock(cube, 1); up_clock(cube, 2); left_clock(cube, 1); up_anticlock(cube, 1); right_clock(cube, 1); up_anticlock(cube, 1); } else { if (flag_pll < 4) { up_clock(cube, 1); flag_pll++; } else { cube_clock(cube, 1); flag_pll = 0; } } }}/*目前网络原因,无法上传文件,后续会将.c文件上传,以便学习*/
1 0
- 三阶魔方CFOP复原的C语言算法
- 三阶魔方CFOP还原方法图解
- 魔方CFOP算法的java实现
- 三阶魔方复原公式
- 魔方CFOP算法java实现
- 三阶魔方还原C语言程序
- 魔方CFOP公式
- 魔方复原的编程实现
- 最快的魔方复原方法
- 2阶魔方的复原的BFS写法。。。。
- 任意阶幻方(魔方阵)的C语言构造算法
- 任意阶幻方(魔方阵)的C语言构造算法
- 魔方数组的C 语言实现以及算法
- 魔方简单实现(c语言,tc2.0编译通过)不含解魔方的算法
- 魔方阵算法及C语言实现
- 魔方阵算法及C语言实现
- 魔方阵算法及C语言实现
- c语言实现魔方阵算法
- poj 3273 Monthly Expense 二分查找
- 第一个Python爬虫,爬取某个新浪博客所有文章并保存为doc文档
- Maven项目中War包的打包及依赖方式
- 使用Eclipse开发Java Web过程中Debug调试的使用方法
- 字符串哈希-洛谷P3498 [POI2010]KOR-Beads
- 三阶魔方CFOP复原的C语言算法
- Spring框架实现AOP的xml和注解两种方式
- 希尔排序--学习笔记
- python实现等同于excel的Lookupv函数处理excel文件
- Allegro带通孔焊盘的制作
- Android开发播放视频控制进度的控件VideoView
- postgresql: C:: Permission denied
- 数据库简介
- LeetCode 100. Same Tree 题解 —— Java