又是边界。。。错了两次,从今天开始准备期末考试,明显挑战很大啊!
#include <stdio.h>
#include <string.h>
int p[20][20],o1[300],o2[300];
int main()
{
int i,j,k,start,end,c0,r0;
int num;
int change1[9]= {1,1,-1,-1,2,2,-2,-2};
int change2[9]= {2,-2,2,-2,1,-1,1,-1};
char c1,r1,c2,r2;
while(scanf("%c%c%*c%c%c%*c",&c1,&r1,&c2,&r2)!=EOF)
{
memset(p,0,sizeof(p));
num = 0;
o1[0] = c1 - 'a' + 1;
o2[0] = r1 - '0';
c0 = c2 - 'a' + 1;
r0 = r2 - '0';
p[o1[0]][o2[0]] = 1;
start = end = 0;
for(;;)
{
j = 1;
if(p[c0][r0])break;
for(i = start; i <= end; i ++)
{
for(k = 0; k <= 7; k ++)
{
if(o1[i]+change1[k]<=8&&o1[i]+change1[k]>=1&&o2[i]+change2[k]<=8&&o2[i]+change2[k]>=1)
{
if(p[o1[i]+change1[k]][o2[i]+change2[k]] == 0)
{
o1[end+j] = o1[i]+change1[k];
o2[end+j] = o2[i]+change2[k];
j ++;
p[o1[i]+change1[k]][o2[i]+change2[k]] = 1;
}
}
}
}
start = end + 1;
end = end + j - 1;
num ++;
}
printf("To get from %c%c to %c%c takes %d knight moves.\n",c1,r1,c2,r2,num);
}
return 0;
}