魔方算法源代码.docx
- 文档编号:29326786
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:31
- 大小:17.89KB
魔方算法源代码.docx
《魔方算法源代码.docx》由会员分享,可在线阅读,更多相关《魔方算法源代码.docx(31页珍藏版)》请在冰豆网上搜索。
魔方算法源代码
#include""
#include""
intcolor[6][9]={4,4,4,4,4,4,4,4,4,
2,2,2,2,2,2,2,2,2,
14,14,14,14,14,14,14,14,14,
15,15,15,15,15,15,15,15,15,
7,7,7,7,7,7,7,7,7,
9,9,9,9,9,9,9,9,9};
intcolumn[6][9]={195,255,315,345,375,315,255,225,285,
180,180,180,240,300,300,300,240,240,
345,345,345,375,405,405,405,375,375,
470,470,470,530,590,590,590,530,530,
55,55,55,85,115,115,115,85,85,
195,255,315,345,375,315,255,225,285};
introw[6][9]={135,135,135,105,75,75,75,105,105,
180,240,300,300,300,240,180,180,240,
165,225,285,255,225,165,105,135,185,
90,150,210,210,210,150,90,90,150,
165,225,285,255,225,165,105,135,185,
425,425,425,395,365,365,365,395,395};
voidboxinit()
{
setcolor(CYAN);
moveto(150,150);
lineto(330,150);
line(150,210,330,210);
line(150,270,330,270);
line(150,330,330,330);
line(180,120,360,120);
line(210,90,390,90);
line(240,60,420,60);
line(360,120,360,300);
line(390,90,390,270);
line(420,60,420,240);
line(330,210,420,120);
line(330,270,420,180);
line(330,330,420,240);
line(330,150,420,60);
line(330,150,330,330);
line(270,150,270,330);
line(210,150,210,330);
line(150,150,150,330);
line(150,150,240,60);
line(210,150,300,60);
line(270,150,360,60);
moveto(40,150);
lineto(130,60);
lineto(130,240);
lineto(40,330);
lineto(40,150);
line(70,120,70,300);
line(100,90,100,270);
line(40,210,130,120);
line(40,270,130,180);
moveto(440,60);
lineto(620,60);
lineto(620,240);
lineto(440,240);
lineto(440,60);
line(440,120,620,120);
line(440,180,620,180);
line(500,60,500,240);
line(560,60,560,240);
moveto(150,440);
lineto(330,440);
lineto(420,350);
lineto(240,350);
lineto(150,440);
line(210,440,300,350);
line(270,440,360,350);
line(180,410,360,410);
line(210,380,390,380);
}
voidtemp()
{delay
(1);
}
voidupcolor()
{inti,j;
for(i=0;i<6;i++)
for(j=0;j<9;j++)
{setfillstyle(1,color[i][j]);
floodfill(column[i][j],row[i][j],CYAN);
temp();}
}
//该函数实现边面转90度的功能
//bt为要转的边面
voidborderturn(intbt)
{intx1,x2;
x1=color[bt][0];
x2=color[bt][1];
color[bt][0]=color[bt][2];
color[bt][1]=color[bt][3];
color[bt][2]=color[bt][4];
color[bt][3]=color[bt][5];
color[bt][4]=color[bt][6];
color[bt][5]=color[bt][7];
color[bt][6]=x1;
color[bt][7]=x2;
}
//该函数实现中间面转90度的功能
//x1,x2,x3,x4为旋转涉及到的面参数,x5-x16为正方形参数说明是哪个正方形参与了旋转
//其中x5,x6,x7为x1面的
//x8,x9,x10为x2面的
//x11,x12,x13为x3面的
//x14,x15,x16为x4面的
//中间面旋转涉及到四个面的变化
voidmedturn(intx1,intx2,intx3,intx4,intx5,intx6,intx7,intx8,
intx9,intx10,intx11,intx12,intx13,intx14,intx15,intx16)
{inty1,y2,y3;
y1=color[x1][x5];
y2=color[x1][x6];
y3=color[x1][x7];
color[x1][x5]=color[x2][x8];
color[x1][x6]=color[x2][x9];
color[x1][x7]=color[x2][x10];
color[x2][x8]=color[x3][x11];
color[x2][x9]=color[x3][x12];
color[x2][x10]=color[x3][x13];
color[x3][x11]=color[x4][x14];
color[x3][x12]=color[x4][x15];
color[x3][x13]=color[x4][x16];
color[x4][x14]=y1;
color[x4][x15]=y2;
color[x4][x16]=y3;
}
//函数实现UP面顺时针转90*i度的功能
voidturn1(inti)
{intk;
for(k=0;k
borderturn(0);
medturn(1,2,3,4,0,7,6,0,7,6,6,7,0,6,7,0);
}
}
//函数实现UP面和DOWN面中间层顺时针转90*i度的功能
voidturn2(inti)
{intk;
for(k=0;k
medturn(1,2,3,4,1,8,5,1,8,5,5,8,1,5,8,1);
}
}
//函数实现DOWN面顺时针转90*i度的功能
voidturn3(inti)
{intk;
for(k=0;k
borderturn(5);
medturn(1,2,3,4,2,3,4,2,3,4,4,3,2,4,3,2);
}
}
//函数实现FRONT面顺时针转90*i度的功能
voidturn4(inti)
{intk;
for(k=0;k
borderturn
(1);
medturn(4,5,2,0,0,1,2,0,1,2,2,1,0,2,1,0);
}
}
//函数实现FRONT面和BACK面的中间层顺时针转90*i度的功能
voidturn5(inti)
{intk;
for(k=0;k
medturn(4,5,2,0,7,8,3,7,8,3,3,8,7,3,8,7);
}
}
//函数实现BACK面顺时针转90*i度的功能
voidturn6(inti)
{intk;
for(k=0;k
borderturn(3);
medturn(4,5,2,0,6,5,4,6,5,4,4,5,6,4,5,6);
}
}
//函数实现RIGHT面顺时针转90*i度的功能
voidturn7(inti)
{intk;
for(k=0;k
borderturn
(2);
medturn(1,5,3,0,6,5,4,2,3,4,4,5,6,4,3,2);
}
}
//函数实现LEFT面和RIGHT面的中间层顺时针转90*i度的功能
voidturn8(inti)
{intk;
for(k=0;k
medturn(1,5,3,0,7,8,3,1,8,5,3,8,7,5,8,1);
}
}
//函数实现LEFT面顺时针转90*i度的功能
voidturn9(inti)
{intk;
for(k=0;k
borderturn(4);
medturn(1,5,3,0,0,1,2,0,7,6,2,1,0,6,7,0);
}
}
//实现i次L-E'-L'-U-L-E-L'-U'功能
voidturna(inti)
{intk;
for(k=0;k
turn9
(1);//L
turn2(3);//E'
turn9(3);//L'
turn1
(1);//U
turn9
(1);//L
turn2
(1);//E
turn9(3);//L'
turn1(3);//U'
}
}
//实现i次R-E-R'-U'-R-E'-U功能
voidturnb(inti)
{intk;
for(k=0;k
turn7
(1);//R
turn2
(1);//E
turn7(3);//R'
turn1(3);//U'
turn7
(1);//R
turn2(3);//E'
turn7(3);//R'
turn1
(1);//U
}
}
voidturnc(inti)
{intk;
for(k=0;k
turn7
(1);
turn9
(1);
turn1(3);
turn9(3);
turn1
(1);
turn7(3);
turn1(3);
turn9
(1);
turn1
(1);
turn9(3);
}
}
voidturnd(inti)
{intk;
for(k=0;k
turn9
(1);
turn7
(1);
turn1
(1);
turn7(3);
turn1(3);
turn9(3);
turn1
(1);
turn7
(1);
turn1(3);
turn7(3);
}
}
voidturne(inti)
{intk;
for(k=0;k
turn7(3);
turn3
(1);
turn7
(1);
turn3(3);
turn4
(1);
turn3(3);
turn4(3);
}
}
voidturnf(inti)
{intk;
for(k=0;k
turn4
(1);
turn2
(1);
turn9
(1);
turn2(3);
turn4
(1);
}
}
voidturnc1(inti)
{intk;
for(k=0;k
turn4(3);
turn2(3);
turn7
(1);
turn2
(1);
turn4(3);
}
}
voidturnd1(inti)
{intk;
for(k=0;k
turn8
(1);
turn9
(1);
turnd
(1);
turn8(3);
turn9(3);
}
}
voidturnb1(inti)
{intk;
for(k=0;k
turn7
(1);
turnd
(1);
turn7(3);
}
}
voidturnlast()
{intk,total,k1,total1,i,j,c0,c1,c2,c3,c4,c5;
c0=color[0][8];
c5=color[5][8];
/*对好第一层的十字架*/
total=0;
while(total<5){
i=0;
while(color[5][1]!
=c5){
turn4
(1);
if(i>4)break;
i++;
}
if(i==5){
i=0;
while(color[5][1]!
=c5){
turn1
(1);
if(i<4)turn4
(2);
else{
turn5
(1);
turn6
(1);
turn8(3);
turn6(3);
turn5(3);
}
if(i>7)break;
i++;
}
if(i==8){
i=0;
while(color[5][1]!
=c5){
turn2
(1);
if(i<4)turn4
(1);
elseturn4(3);
if(i>7)break;
i++;
}
if(i==8){
}else{total++;turn1
(1);turn2
(1);turn3
(1);}
}else{total++;turn1
(1);turn2
(1);turn3
(1);}
}else{total++;turn1
(1);turn2
(1);turn3
(1);}
}
c0=color[0][8];
c1=color[1][8];
c2=color[2][8];
c3=color[3][8];
c4=color[4][8];
c5=color[5][8];
while(color[3][3]!
=c3){
turn3
(1);
}
upcolor();
if(color[4][3]==c1)turnf
(1);
elseif(color[2][3]==c1)turnc1
(1);
if(color[4][3]!
=c4){turn5
(2);turn1
(2);turn5
(2);}
upcolor();
/*对好第一层的十字架end*/
/*对好第一层*/
total=0;
k=0;
while(total<4){
c1=color[1][8];
c4=color[4][8];
i=0;
while(color[1][2]==c1&&color[4][2]==c4&&color[5][0]==c5){
turn2
(1);turn3
(1);turn1
(1);
c1=color[1][8];
c4=color[4][8];
if(i>4)break;
i++;
}
while(color[1][2]!
=c1||color[4][2]!
=c4||color[5][0]!
=c5){
i=0;
while(color[1][2]!
=c1||color[4][2]!
=c4||color[5][0]!
=c5){
turn9
(2);turnc
(1);turn9
(2);turn1
(1);
if(i>3)break;
i++;
}
if(i<4)total++;
turn2
(1);turn3
(1);
c1=color[1][8];
c4=color[4][8];
}
if(k>100)break;
k++;
}
upcolor();
/*对好第一层end*/
c0=color[0][8];
c1=color[1][8];
c2=color[2][8];
c3=color[3][8];
c4=color[4][8];
total=0;
/*开始对第二层*/
while(color[2][5]!
=c2||color[3][5]!
=c3||color[3][1]!
=c3||color[4][5]!
=c4||
color[4][1]!
=c4||color[1][1]!
=c1||color[1][5]!
=c1||color[2][1]!
=c2){
/*当看到顶层有第二层的东西就将其放下去*/
for(k=0;k<4;k++){
i=0;
while(color[0][1]==c0||color[1][7]==c0){
turn1
(1);
if(i>4)break;
i++;
}
if(i<5){
i=0;
while(color[1][7]!
=c3){
turn2
(1);
c1=color[1][8];
c2=color[2][8];
c3=color[3][8];
c4=color[4][8];
if(i>4)break;
i++;
}
if(i<5){
if(color[1][7]==c3){
if(color[0][1]==c2)turna
(1);
else
if(color[0][1]==c4)turnb
(1);
}
}
}
}
upcolor();
total=0;
k=0;
c0=color[0][8];
c1=color[1][8];
c2=color[2][8];
c3=color[3][8];
c4=color[4][8];
/*使第二层远角做成不符*/
i=0;
while(color[2][5]==c2&&color[3][5]==c3){
turn2
(1);
turn3
(1);
c1=color[1][8];
c2=color[2][8];
c3=color[3][8];
c4=color[4][8];
if(i>4)break;
i++;
}
k=0;
if(color[2][5]!
=c2||color[3][5]!
=c3){
turna
(2);
turn2
(1);
turn3
(1);
k=1;
c1=color[1][8];
c2=color[2][8];
c3=color[3][8];
c4=color[4][8];
}
i=0;
while(color[0][1]!
=c2||color[1][7]!
=c3){
turn2
(1);
k++;
c1=color[1][8];
c2=color[2][8];
c3=color[3][8];
c4=color[4][8];
if(i>3)break;
i++;
}
if(color[0][1]==c2&&color[1][7]==c3){
turna
(1);
if(k<4){
turn2(4-k);
c1=color[1][8];
c2=color[2][8];
c3=color[3][8];
c4=color[4][8];
}
}
upcolor();
if(total>10)break;
total++;
}
i=0;
while(color[1][3]!
=color[1][8]){
turn2
(1);
if(i>4)break;
i++;
}
upcolor();
/*对好第二层end*/
/*对好第三层的四个角*/
c0=color[0][8];
c1=color[1][8];
c2=color[2][8];
c3=color[3][8];
c4=color[4][8];
j=0;
while((color[0][0]!
=c0||color[1][0]!
=c1||color[4][0]!
=c4)||
(color[0][6]!
=c0||color[3][0]!
=c3||color[4][6]!
=c4)||
(color[0][2]!
=c0||color[2][0]!
=c2||color[1][6]!
=c1)){
/*将近角对好*/
k=0;
while(color[0][2]!
=c0||color[2][0]!
=c2||color[1][6]!
=c1){
i=0;
while(color[0][2]!
=c0||color[2][0]!
=c2||color[1][6]!
=c1){
turn1
(1);
if(i>4)break;
i++;
}
if(i>4)turnc
(1);
if(k>16)break;
k++;
}
upcolor();
k1=0;
while(color[0][0]!
=c0||color[1][0]!
=c1||color[4][0]!
=c4||
color[0][6]!
=c0||color[3][0]!
=c3||color[4][6]!
=c4){
/*将左角对好*/
k=0;
while(color[0][0]!
=c0||color[1][0]!
=c1||color[4][0]!
=c4){
turnd
(1);
i=0;
while((i<3)&&(color[0][0]!
=c0||color[1][0]!
=c1||color[4][0]!
=c4)){
turnd
(1);
i++;
}
if((i==3)&&(color[0][0]!
=c0||color[1][0]!
=c1||color[4][0]!
=c4)){
turn1
(1);
turnc((k%3));
turn1(3);
}
if(k>15)break;
k++;
}
upcolor();
/*还是没有对好*/
if((k>15)&&(color[0][0]!
=c0||co
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 魔方 算法 源代码