您的位置:首页 > 其它

POJ_1657_Distance on Chessboard

2010-06-11 13:22 501 查看
/*
棋盘上,无论起点和终点在什么位置:
1.王:移动步数是横纵坐标的差值的最大值;
2.后:8个方向的直线式一步,其余2步。
3.车:水平竖直4个方向一步,其余2步。
4.象:注意到棋盘上横纵坐标和的奇偶性,可知只有和起点类型一样的才能到达
否则不可达;若起终点在一条直线上,一步,否则需要2步
*/
#include<stdio.h>
int abs(int x)
{
if(x>0)
return x;
else
return -x;
}
int king(int a,int b,int c,int d)
{
if(abs(a-c)>abs(b-d))
printf("%d ",abs(a-c));
else
printf("%d ",abs(b-d));
return 0;
}
int queen(int a,int b,int c,int d)
{
if(a==c||b==d||abs(c-a)==abs(d-b))
printf("1 ");
else
printf("2 ");
return 0;
}
int car(int a,int b,int c,int d)
{
if(a==c||b==d)
printf("1 ");
else
printf("2 ");
return 0;
}
int elephant(int a,int b,int c,int d)
{
if(((a+b)&1)!=((c+d)&1))///!=优先级高于$
printf("Inf/n");
else
{
if(abs(a-c)==abs(b-d))
printf("1/n");
else
printf("2/n");
}
return 0;
}
int main()
{
int cas;
int x1,y1,x2,y2;
char c1,c2;
scanf("%d",&cas);
getchar();
while(cas--)
{
c1=getchar();
c2=getchar();
x1=9-(c1-96);
y1=c2-'0';
getchar();
c1=getchar();
c2=getchar();
x2=9-(c1-96);
y2=c2-'0';
getchar();
if(x1==x2&&y1==y2)
{
printf("0 0 0 0/n");
continue;
}
king(y1,x1,y2,x2);
queen(y1,x1,y2,x2);
car(y1,x1,y2,x2);
elephant(y1,x1,y2,x2);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: