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();
}