#include<stdio.h>
#include<math.h>
int main()
{
int nCases,i;
scanf("%d",&nCases);
for(i=0;i<nCases;i++)
{
char begin[5],end[5];
scanf("%s%s",begin,end);
int x,y;
x=abs(begin[0]-end[0]);
y=abs(begin[1]-end[1]);
if(x==0&&y==0) printf("0 0 0 0\n");
else{
if(x<y) printf("%d",y);//wang
else printf("%d",x);
if(x==0||y==0||x==y) printf(" 1");//hou
else printf(" 2");
if(x==0||y==0) printf(" 1");
else printf(" 2");//che
if(abs(x-y)%2!=0) printf(" Inf\n");//xiang
else if(x==y) printf(" 1\n");
else printf(" 2\n");}
}
return 0;
}
关键是象的处理,棋盘上的点分两类,一是横纵坐标的差为奇数,另一类是偶数,他每走一步,因为横纵坐标增加或减少时一致的,所以他们的差奇偶性是保持不变的,因此,上述的第一类跟第二类的无法相互到达的。如果判断出起始点跟终止点分别属于两类点,则输出Inf。如果他们属于同一类点,象从起始点到终止点需要的步数为1(x==y)或2(x!=y)