ZCMU-1345-国际象棋

1345: 国际象棋

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 123   Solved: 40
[ Submit][ Status][ Web Board]

Description

 国际象棋的棋盘是黑白相间的8 * 8的方格,棋子放在格子中间。
王、后、车、象的走子规则如下:
王:横、直、斜都可以走,但每步限走一格。
后:横、直、斜都可以走,每步格数不受限制。
车:横、竖均可以走,不能斜走,格数不限。
象:只能斜走,格数不限。
你的任务是写一个程序,给定起始位置和目标位置,计算王、后、车、象从起始位置走到目标位置所需的最少步数。

Input

 第一行是测试数据的组数t(0 <= t <= 20)。以下每行是一组测试数据,每组包括棋盘上的两个位置,第一个是起始位置,第二个是目标位置。位置用"字母-数字"的形式表示,字母从"a"到"h",数字从"1"到"8"。

Output

对于输入的每组测试数据,输出王、后、车、象所需的最少步数。如果无法到达,就输出"Inf". 

Sample Input

2
a1 c3
f5 f8

Sample Output

2 1 2 1
3 1 1 Inf

HINT

请使用%s读入字符串



【解析】
这道题需要知道他们都是怎么走的之后就是需要注意的是斜着走相当于横着走加竖着走了一步。还有就是要算出x坐标上差了几步,y坐标上差了几步。知道了这些我们就可以做了
#include <cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{
    int n,x,y,a,b,c,q;
    char s1[10];
    char s2[10];
    scanf("%d",&n);
    while(n--)
    {
        scanf("%s%s",s1,s2);
        x=fabs(s2[0]-s1[0]);//求x点相差多少
        y=fabs(s2[1]-s1[1]);//求y点相差多少
        if(x==0&&y==0)
        {
            printf("0 0 0 0\n");//起点和终点相等则不需要移动
            continue;
        }
        a=min(x,y)+fabs(x-y);//因为斜着走一格相当于横着竖着都走一格了,所以就可以少走,所以这样可以算出最少多少步
        q=fabs(x-y);
        if((x==0)||(y==0)||(x==y))
            b=1;//如果在同一行上或者同一列上或者同一条斜线上就只需要1步
        else
            b=2;//否则需要两步
        if((x==0)||(y==0))
            c=1;//如果在同一行或者同一列上只需要一步
        else
            c=2;//否则需要两步
        if(x==y)
            {
                printf("%d %d %d 1\n",a,b,c);//在一条斜线上象只用走一步
            }
        else if(q%2!=0)
        {
        printf("%d %d %d Inf\n",a,b,c);//如果两者相减取余2不为0的话说明到不了因为斜着走是相当于横着走和竖着走一次
        }
        else
        {
            printf("%d %d %d 2\n",a,b,c);//否则需要两步可以到达
        }
    }
  return 0;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值