王、后、车、象的走子规则如下:
王:横、直、斜都可以走,但每步限走一格。
后:横、直、斜都可以走,每步格数不受限制。
车:横、竖均可以走,不能斜走,格数不限。
象:只能斜走,格数不限。
写一个程序,给定起始位置和目标位置,计算王、后、车、象从起始位置走到目标位置
王:横、直、斜都可以走,但每步限走一格。
后:横、直、斜都可以走,每步格数不受限制。
车:横、竖均可以走,不能斜走,格数不限。
象:只能斜走,格数不限。
写一个程序,给定起始位置和目标位置,计算王、后、车、象从起始位置走到目标位置
所需的最少步数。
输入数据
第一行是测试数据的组数 t( 0 <= t <= 20)。以下每行是一组测试数据,每组包括棋盘
上的两个位置,第一个是起始位置,第二个是目标位置。位置用"字母-数字"的形式表示,
字母从"a"到"h",数字从"1"到"8"。
输出要求
对输入的每组测试数据,输出王、后、车、象所需的最少步数。如果无法到达,就输出
"Inf".
#include <iostream>
using namespace std;
int main()
{
int nCases,i;
cin>>nCases;
for(i=0;i<nCases;i++)
{
char begin[5],end[5];//用begin和end分别存储棋子的起止位置
cin>>begin>>end;
int x=abs(begin[0]-end[0]);//用x和y分别表示起止位置之间x方向和y方向的
//距离
int y=abs(begin[1]-end[1]);
if(x==0&&y==0)
cout<<0<<" "<<0<<" "<<0<<" "<<0<<endl;
else
{
if(x<y) //王的步数
cout<<y<<" ";
else
cout<<x<<" ";
if(x==y||x==0||y==0)//后的步数
cout<<1<<" ";
else
cout<<2<<" ";
if(x==0||y==0)//车的步数
cout<<1<<" ";
else
cout<<2<<" ";
if(abs(x-y)%2!=0)//象的步数
cout<<"Inf"<<endl;
else if(x==y)
cout<<1<<endl;
else
cout<<2<<endl;
}
}
return 0;
}