三阶魔方CFOP复原的C语言算法

/******************************************************************/
/** 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文件上传,以便学习*/
  • 11
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七七云享

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值