CHESSCBG - Bàn cờ thế

Tác giả: hieult

Ngôn ngữ: C++

#include <stdio.h>
//#include <conio.h>
#include <string.h>
long TTD(long x)
  {
  if(x<0) return -x;
  else return x;
  }
struct mang
  {
  long x,y;
  };
main()
{
char s[10][5];
mang a1[10],a2[10];
long b[10],C[10],t,x,min=1000;
C[0]=1;
for(long i=1;i<=8;i++)
  C[i]=C[i-1]*i;
for(long i=1;i<=8;i++)
  scanf("%s",s[i]);
t=1;  
for(long i=1;i<=4;i++)
  for(long j=0;j<=3;j++)
    if(s[i][j]=='1')
      {
      a1[t].x=j+1;
      a1[t].y=i;
      t++;
      }
t=1;            
for(long i=5;i<=8;i++)
  for(long j=0;j<=3;j++)      
    if(s[i][j]=='1')
      {
      a2[t].x=j+1;
      a2[t].y=i-4;
      t++;
      }
t=0;
while(t!=C[8])
  {
  x=t;  
  long tong=0;
  for(long i=1;i<=8;i++)
    b[i]=i;
  for(long i=1;i<=8;i++)
    {
    long k=x/C[8-i];
    tong=tong+TTD(a1[i].x-a2[b[k+1]].x)+TTD(a1[i].y-a2[b[k+1]].y);
    for(long j=k+1;j<=8-i;j++)
      b[j]=b[j+1];
    x=x%C[8-i];
    //if(t==722)
    //printf("%ld %ld\n",x,k);  
    }
  if(tong<min)
    min=tong;
  t++;  
  }
printf("%ld",min);
//getch();
}        
    
                          
         

Download