/******************************************************************/
/** 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;elseup_clock(cube,1);}}
}
/*
** brief: 第一层 第二层复原
*/
void cfop_f2l( Cube *cube )
{//底层+四个侧面的31=22,那么四个侧面的33必然等于22while (!(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);}elseup_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);}elseup_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);}}elseup_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])){//OLL1if (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);}//OLL3else 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);}//OLL4else 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);}//OLL5else 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);}//OLL6else 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);}//OLL7else 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);}//OLL8else 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);}//OLL9else 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);}//OLL10else 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);}//OLL11else 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);}//OLL12else 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);}//OLL13else 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);}//OLL14else 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);}//OLL15else 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);}//OLL16else 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);}//OLL17else 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);}//OLL18else 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);}//OLL19else 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);}//OLL20else 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);}//OLL21else 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);}//OLL22else 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);}//OLL23else 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);}//OLL24else 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);}//OLL25else 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);}//OLL26else 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);}//OLL27else 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);}//OLL28else 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);}//OLL29else 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);}//OLL30else 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);}//OLL31else 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);}//OLL32else 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);}//OLL33else 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);}//OLL34else 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);}//OLL35else 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);}//OLL36else 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);}//OLL37else 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);}//OLL38else 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);}//OLL39else 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);}//OLL40else 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);}//OLL41else 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);}//OLL42else 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);}//OLL43else 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);}//OLL44else 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);}//OLL45else 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);}//OLL46else 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);}//OLL47else 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);}//OLL48else 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);}//OLL49else 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);}//OLL50else 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);}//OLL51else 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);}//OLL52else 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);}//OLL53else 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);}//OLL54else 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);}//OLL55else 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);}//OLL56else 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);}//OLL57else 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);}elseup_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])){//PLL1if (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);}//PLL2else 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);}//PLL3else 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);}//PLL4else 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);}//PLL5else 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);}//PLL6else 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);}//PLL7else 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);}//PLL8else 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);}//PLL9else 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);}//PLL10else 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);}//PLL11else 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);}//PLL12else 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);}//PLL13else 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);}//PLL14else 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);}//PLL15else 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);}//PLL16else 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);}//PLL17else 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);}//PLL18else 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);}//PLL19else 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);}//PLL20else 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);}//PLL21else 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文件上传,以便学习*/

三阶魔方CFOP复原的C语言算法相关推荐

  1. 魔方cfop公式软件_【高级篇】(四)三阶魔方CFOP高级玩法之——OLL

    一.OLL这一步需要做什么? OLL这一步是最容易理解的,到了这一步,前两层已经全部复原了 那不管顶面出现什么情况,都能用一个公式将顶面黄色朝向全部调整正确(顺序不管) 一步到位的代价就是--这步骤有 ...

  2. 12面魔方公式图解法_【高级篇】(三)三阶魔方CFOP高级玩法之——F2L

    一.F2L这一步要干什么 1.先了解一下"棱角对"和"槽位"的概念 棱角对:即由一个棱块和一个角块构成,是F2L的基本单元(共四组) 槽位:给"棱角对 ...

  3. 魔方cfop公式软件_【高级篇】(三)三阶魔方CFOP高级玩法之——F2L

    一.F2L这一步要干什么 1.先了解一下"棱角对"和"槽位"的概念 棱角对:即由一个棱块和一个角块构成,是F2L的基本单元(共四组) 槽位:给"棱角对 ...

  4. 三阶魔方CFOP还原方法图解

    >CFOP方法一共分四步:CROSS→F2L→OLL→PLL #CROSS:意思是底部打好十字 #F2L:(First two Layers) 意思是同时对好前两层 #OLL:(Orientat ...

  5. 数据流程图顶层一层二层_只需三个公式,三阶魔方超简单入门图文教程5:完全复原第二层...

    大家好,欢迎来到大超小志,上节课我们讲了"复原底层角块",也就是完全复原第一层,今天我们来复原第二层的棱块,也就是完全复原第二层. 第二层的棱块要么在第二层,要么在最顶层. 我们先 ...

  6. 魔方cfop公式软件_【初级篇】(八)最简单的三阶魔方入门教程——顶棱还原...

    本系列教程适合刚刚接触魔方,又比较有好奇心,是为渴望学会还原魔方,又不想死记公式的人准备的.全部教程只使用三种公式,还原过程以理解为主,公式为辅. 第八部分 顶层四个棱块还原 8.1 预览顶层四棱块还 ...

  7. python实现魔方复原_大佬们帮忙看一下,python解三阶魔方有沒有更快的方法

    #导入easygui模块 import easygui as eg #得到每一面的颜色分布(里面说的图片在下面) b = eg.multenterbox("请按从上到下,从左到右的顺序输入中 ...

  8. 异形3×3魔方还原教程_【理论篇】三阶魔方4.33千亿亿种变化是怎么计算出来的?...

    本篇文章主要介绍三阶魔方总状态数是如何计算出来的,并介绍了两种算法,尽量保证语言通俗易懂,不涉及高深的理论知识(当然我也不懂:P) 一.4.33千亿亿到底有多大? 我们都知道三阶魔方的总变化状态数量为 ...

  9. 魔方CFOP公式匹配算法

    1.魔方的原理及其性质 魔方最初是由匈牙利教授厄尔诺鲁比克发明的,之后经过发展,魔方衍化出了多种多样的版本,但最为经典的还是三阶魔方,具有普适性的同时,又是被大家所熟悉的.所以,本文选了三阶魔方作为本 ...

最新文章

  1. tinypdf虚拟打印机中文版
  2. P6846-[CEOI2019]Amusement Park【状压dp,FWT】
  3. python 示例_带有示例的Python File read()方法
  4. Spatial Transformer Networks
  5. docker mysql 漂移_Centos7系统Docker环境下Mysql部署
  6. 概率论与数理统计(第四版) 课后习题解析 盛骤、谢式千 编|高等教育出版社 大学课后习题答案
  7. 数据库中的内连接、自然连接、和外连接的区别
  8. Qt:45---QPainter绘图
  9. 编写一个链表结构关于车的属性,读取任意多辆车的车型、车牌号、外形颜色、价钱输入。之后遍历链表,再将链表数据打印出来。
  10. SQLserver管道的另一端无任何进程
  11. c语言程序设计 滴水视频,编程达人滴水中级班视频教程
  12. transformers的beam_search
  13. python图片批量处理(水印、重命名)
  14. Android Sensor感应器:获取用户移动方向,指南针原理
  15. 从响应式编程到 Combine 实践
  16. Linux 运行vcs仿真命令,VCS使用以及命令行调试
  17. windows编译g20问题解决记录
  18. Windows安全防范手册
  19. 【博客465】BGP(边界网关协议)-----BGP路由黑洞及路由反射器与联盟
  20. 最小栈问题(空间换时间O(1)复杂度)

热门文章

  1. 人群计数之生成密度图
  2. 1044 Shopping in Mars(二分法)
  3. 百度新闻资讯类信息爬虫--统计一年内关键词新闻的条数
  4. JMeter —— Jar包性能测试 完整流程教学
  5. 微软学术搜索的新功能设想:用户账户系统——史经浩
  6. CasADi学习(1)
  7. 搞懂敏感性、特异性以及精确率和召回率的关系
  8. Pytest之fixture中的参数传递
  9. 陪审团(01背包问题倒推具体方案)
  10. 田忌赛马java lms_【044】:田忌赛马