Distance on Chessboard
Time Limit: 1000MS Memory Limit: 10000K
Total Submissions: 12922 Accepted: 4509

Description

国际象棋的棋盘是黑白相间的8 * 8的方格,棋子放在格子中间。如下图所示:
POJ1657(Distance on Chessboard)

王、后、车、象的走子规则如下:
  • 王:横、直、斜都可以走,但每步限走一格。
  • 后:横、直、斜都可以走,每步格数不受限制。
  • 车:横、竖均可以走,不能斜走,格数不限。
  • 象:只能斜走,格数不限。


写一个程序,给定起始位置和目标位置,计算王、后、车、象从起始位置走到目标位置所需的最少步数。

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

Source

POJ1657(Distance on Chessboard)Problem: 1657
POJ1657(Distance on Chessboard)Memory: 288K        Time: 0MS
POJ1657(Distance on Chessboard)Language: C
++        Result: Accepted
POJ1657(Distance on Chessboard)
POJ1657(Distance on Chessboard)    
* Source Code
POJ1657(Distance on Chessboard)
POJ1657(Distance on Chessboard)      #include 
<iostream>
POJ1657(Distance on Chessboard)      #include 
<string>
POJ1657(Distance on Chessboard)      #include 
<cstdlib>
POJ1657(Distance on Chessboard)      #include 
<cmath>
POJ1657(Distance on Chessboard)      
using namespace std;
POJ1657(Distance on Chessboard)
POJ1657(Distance on Chessboard)      
int main()
POJ1657(Distance on Chessboard)POJ1657(Distance on Chessboard)      
POJ1657(Distance on Chessboard){
POJ1657(Distance on Chessboard)          
int nCase;
POJ1657(Distance on Chessboard)          
int x, y;
POJ1657(Distance on Chessboard)          
string s, e;
POJ1657(Distance on Chessboard)          
POJ1657(Distance on Chessboard)          cin
>>nCase;
POJ1657(Distance on Chessboard)          
while(nCase--)
POJ1657(Distance on Chessboard)POJ1657(Distance on Chessboard)          
POJ1657(Distance on Chessboard){
POJ1657(Distance on Chessboard)              cin
>>s>>e;
POJ1657(Distance on Chessboard)              x 
= abs(s[0- e[0]);
POJ1657(Distance on Chessboard)              y 
= abs(s[1- e[1]);
POJ1657(Distance on Chessboard)
POJ1657(Distance on Chessboard)              
if(!&& !y)
POJ1657(Distance on Chessboard)POJ1657(Distance on Chessboard)              
POJ1657(Distance on Chessboard){
POJ1657(Distance on Chessboard)                  cout
<<"0 0 0 0"<<endl;
POJ1657(Distance on Chessboard)                  
continue;
POJ1657(Distance on Chessboard)              }

POJ1657(Distance on Chessboard)
POJ1657(Distance on Chessboard)              
//====王===
POJ1657(Distance on Chessboard)
              cout<<max(x, y);
POJ1657(Distance on Chessboard)              
POJ1657(Distance on Chessboard)              
//===后===
POJ1657(Distance on Chessboard)
              if(x == y || !|| !y)
POJ1657(Distance on Chessboard)                  cout
<<" 1";
POJ1657(Distance on Chessboard)              
else
POJ1657(Distance on Chessboard)                  cout
<<" 2";
POJ1657(Distance on Chessboard)
POJ1657(Distance on Chessboard)              
//===车===
POJ1657(Distance on Chessboard)
              if(!|| !y)
POJ1657(Distance on Chessboard)                  cout
<<" 1";
POJ1657(Distance on Chessboard)              
else
POJ1657(Distance on Chessboard)                  cout
<<" 2";
POJ1657(Distance on Chessboard)
POJ1657(Distance on Chessboard)              
//===象===
POJ1657(Distance on Chessboard)
              if(abs(x - y ) % 2 != 0)
POJ1657(Distance on Chessboard)                  cout
<<" Inf"<<endl;
POJ1657(Distance on Chessboard)              
else if(x == y)
POJ1657(Distance on Chessboard)                  cout
<<" 1"<<endl;
POJ1657(Distance on Chessboard)              
else
POJ1657(Distance on Chessboard)                  cout
<<" 2"<<endl;
POJ1657(Distance on Chessboard)          }

POJ1657(Distance on Chessboard)          
return 0;
POJ1657(Distance on Chessboard)      }

POJ1657(Distance on Chessboard)
POJ1657(Distance on Chessboard)

转载于:https://www.cnblogs.com/Xredman/archive/2009/05/31/1493024.html

相关文章: