📄 cubes_cpp.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0065)http://algorithm.fzu.edu.cn/优秀作业和报告/1/S060322016/cubes.cpp -->
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="MSHTML 6.00.2900.3086" name=GENERATOR></HEAD>
<BODY><PRE>#include<stdio.h>
#include<fstream.h>
int k[6]={-1,-1,-1,-1,-1,-1};
int h=0,c1=1,c2=0,n1,n2;
int d[100][12];
int c[12];
void rota1()
{ int i,temp;
for(i=0;i<3;i++)
{temp=c[i*4+3];
c[i*4+3]=c[i*4+2];
c[i*4+2]=c[i*4+1];
c[i*4+1]=c[i*4];
c[i*4]=temp; }
}
int compare(int x)
{ int i,j,flag=1;
for(j=0;j<x;j++)
{ if(d[j][0]==-1) continue;flag=1;
for(i=0;i<12;i++)
if(c[i]!=d[j][i])
{flag=0;break;}
if(flag==1) return(flag);}
return(flag);
}
void rota3(int x)
{ int j,flag;
flag=compare(x);
if(flag==1){d[x][0]=-1;return;}
for(j=0;j<3;j++)
{rota1();
flag=compare(x);
if(flag==1) {d[x][0]=-1;return;}}
}
void totalrota(int x){
int i,temp,flag,j;
for(i=0;i<12;i++)
c[i]=d[x][i];
rota3(x);
if(d[x][0]!=-1)
{c[0]=d[x][4];
c[1]=d[x][8];
c[2]=d[x][5];
c[3]=d[x][0];
c[4]=d[x][3];
c[5]=d[x][11];
c[6]=d[x][9];
c[7]=d[x][1];
c[8]=d[x][7];
c[9]=d[x][10];
c[10]=d[x][6];
c[11]=d[x][2];
rota3(x); }
if(d[x][0]!=-1)
{c[0]=d[x][10];
c[1]=d[x][9];
c[2]=d[x][8];
c[3]=d[x][11];
c[4]=d[x][7];
c[5]=d[x][6];
c[6]=d[x][5];
c[7]=d[x][4];
c[8]=d[x][2];
c[9]=d[x][1];
c[10]=d[x][0];
c[11]=d[x][3];
rota3(x);}
if(d[x][0]!=-1)
{c[0]=d[x][2];
c[1]=d[x][6];
c[2]=d[x][10];
c[3]=d[x][7];
c[4]=d[x][3];
c[5]=d[x][1];
c[6]=d[x][9];
c[7]=d[x][11];
c[8]=d[x][0];
c[9]=d[x][5];
c[10]=d[x][8];
c[11]=d[x][4];
rota3(x);}
if(d[x][0]!=-1)
{c[0]=d[x][5];
c[1]=d[x][9];
c[2]=d[x][6];
c[3]=d[x][1];
c[4]=d[x][0];
c[5]=d[x][8];
c[6]=d[x][10];
c[7]=d[x][2];
c[8]=d[x][4];
c[9]=d[x][11];
c[10]=d[x][7];
c[11]=d[x][3];
rota3(x); }
if(d[x][0]!=-1)
{c[0]=d[x][3];
c[1]=d[x][7];
c[2]=d[x][11];
c[3]=d[x][4];
c[4]=d[x][0];
c[5]=d[x][2];
c[6]=d[x][10];
c[7]=d[x][8];
c[8]=d[x][1];
c[9]=d[x][6];
c[10]=d[x][9];
c[11]=d[x][5];
rota3(x);}
}
void perm()
{int i,j;
while(k[c1-1]<12)
{for(i=0;i<12;i++)
for(j=0;j<c1;j++)
{if(i==k[j]) {d[h][i]=n1;break;}
else d[h][i]=n2;}
k[c1-1]++;h++;
}
}
void main(){
int s[12];
int i,temp,j,flag=1,m,count=1;
ifstream infile("input.txt");
ofstream outfile("output.txt");
for(i=0;i<12;i++){
infile >> s[i];}
n1=s[0];
for(i=1;i<12;i++)
{if(s[i]==n1) c1++;
else {n2=s[i];c2++;} }
if(c1>c2){temp=c1;c1=c2;c2=temp;
temp=n1;n1=n2;n2=temp;}
for(i=0;i<c1;i++)
{k[i]=i;}
perm();
m=h;
while(flag)
{ if(k[(c1+4)%6]!=-1&&k[c1-2]!=10)
{k[c1-2]++;k[c1-1]=k[c1-2]+1;flag=1;}
else if(k[(c1+3)%6]!=-1&&k[c1-3]!=9)
{k[c1-3]++;k[c1-2]=k[c1-3]+1;k[c1-1]=k[c1-2]+1;flag=1;}
else if(k[(c1+2)%6]!=-1&&k[c1-4]!=8)
{k[c1-4]++;k[c1-3]=k[c1-4]+1;k[c1-2]=k[c1-3]+1;k[c1-1]=k[c1-2]+1;flag=1;}
else if(k[(c1+1)%6]!=-1&&k[c1-5]!=7)
{k[c1-5]++;k[c1-4]=k[c1-5]+1;k[c1-3]=k[c1-4]+1;k[c1-2]=k[c1-3]+1;k[c1-1]=k[c1-2]+1;flag=1;}
else if(k[c1%6]!=-1&&k[c1-6]!=6)
{k[c1-6]++;k[c1-5]=k[c1-6]+1;k[c1-4]=k[c1-5]+1;k[c1-3]=k[c1-4]+1;k[c1-2]=k[c1-3]+1;k[c1-1]=k[c1-2]+1;flag=1;}
else flag=0;
if(flag==1)
{m=h;perm();}}
for(i=1;i<h;i++)
{ totalrota(i);
if(d[i][0]!=-1) count++;
}
outfile << count;
printf("%d\n",count);
}
</PRE></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -