⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cubes_cpp.htm

📁 给定12 根长度相同的彩色的小木棒的颜色
💻 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&lt;stdio.h&gt;
#include&lt;fstream.h&gt;
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&lt;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&lt;x;j++)
     { if(d[j][0]==-1) continue;flag=1;
      for(i=0;i&lt;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&lt;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&lt;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]&lt;12)
  {for(i=0;i&lt;12;i++)
     for(j=0;j&lt;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&lt;12;i++){
		infile &gt;&gt; s[i];}
  n1=s[0];
  for(i=1;i&lt;12;i++)
    {if(s[i]==n1) c1++;
     else {n2=s[i];c2++;} }
  if(c1&gt;c2){temp=c1;c1=c2;c2=temp;
	    temp=n1;n1=n2;n2=temp;}
  for(i=0;i&lt;c1;i++)
    {k[i]=i;}
    perm();
    m=h;
  while(flag)
  { if(k[(c1+4)%6]!=-1&amp;&amp;k[c1-2]!=10)
      {k[c1-2]++;k[c1-1]=k[c1-2]+1;flag=1;}
      else if(k[(c1+3)%6]!=-1&amp;&amp;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&amp;&amp;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&amp;&amp;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&amp;&amp;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&lt;h;i++)
    { totalrota(i);
      if(d[i][0]!=-1)  count++;
      }
    
	 	outfile &lt;&lt; count; 
		printf("%d\n",count);

}
</PRE></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -