棋盤上的距離

2022-04-28 16:57:08 字數 1416 閱讀 4187

問題描述

西洋棋的棋盤是黑白相間的 8 * 8 的方格,棋子放在格仔中間。如圖3-1 所示:

王、後、車、象的走子規則如下:

 王:橫、直、斜都可以走,但每步限走一格。

 後:橫、直、斜都可以走,每步格數不受限制。

 車:橫、豎均可以走,不能斜走,格數不限。

 象:只能斜走,格數不限。

寫乙個程式,給定起始位置和目標位置,計算王、後、車、象從起始位置走到目標位置

所需的最少步數。

85輸入資料

第一行是測試資料的組數t(0 <= t <= 20)。以下每行是一組測試資料,每組包括棋盤

上的兩個位置,第乙個是起始位置,第二個是目標位置。位置用"字母-數字"的形式表示,

字母從"a"到"h",數字從"1"到"8"。

輸出要求

對輸入的每組測試資料,輸出王、後、車、象所需的最少步數。如果無法到達,就輸出

"inf".

輸入樣例

2a1 c3

f5 f8

輸出樣例

2 1 2 1

3 1 1 inf

解題思路

這個問題是給定乙個棋盤上的起始位置和終止位置,分別判斷王、後、車、象從起始位

置到達終止位置需要的步數。首先,王、後、車、象彼此獨立,分別考慮就可以了。所以這

個題目重點要分析王、後、車、象的行走規則特點,從而推出它們從起點到終點的步數。

我們假設起始位置與終止位置在水平方向上的距離是 x,它們在豎直方向上的距離是y。

根據王的行走規則,他可以橫、直、斜走,每步限走一格,所以需要的步數是min(x,y)+abs(x-y)

– 即x,y 中較小的乙個加上x 與y 之差的絕對值。根據後行走的規則,她可以橫、直、斜

走,每步格數不受限制,所以需要的步數是1(x 等於y 或者 x 等於0 或者 y 等於0)或者

2(x 不等於y)。根據車行走的規則,它可以橫、豎走,不能斜走,格數不限,需要步數為1

(x 或者y 等於0)或者2(x 和y 都不等於0)。根據象行走得規則,它可以斜走,格數不限。

棋盤上的格點可以分為兩類,第一類是它的橫座標和縱座標之差為奇數,第二類是橫縱座標

之差為偶數。對於只能斜走的象,它每走一步,因為橫縱座標增加或減小的絕對值相等,所

以橫座標和縱座標之差的奇偶性無論如何行走都保持不變。因此,上述的第一類點和第二類

點不能互相到達。如果判斷出起始點和終止點分別屬於兩類點,就可以得出它們之間需要無

數步的結論。如果它們屬於同一類點,象從起始點走到終止點需要1(x 的絕對值等於y 的

絕對值)或者2(x 的絕對值不等於y 的絕對值)。

參考程式

1  #include 2  #include 3

void

main( )426

}27 }

棋盤上的距離

描述 西洋棋的棋盤是黑白相間的8 8的方格,棋子放在格仔中間。如下圖所示 王 後 車 象的走子規則如下 寫乙個程式,給定起始位置和目標位置,計算王 後 車 象從起始位置走到目標位置所需的最少步數。輸入第一行是測試資料的組數t 0 t 20 以下每行是一組測試資料,每組包括棋盤上的兩個位置,第乙個是起...

棋盤上的距離

王 後 車 象的走子規則如下 王 橫 直 斜都可以走,但每步限走一格。後 橫 直 斜都可以走,每步格數不受限制。車 橫 豎均可以走,不能斜走,格數不限。象 只能斜走,格數不限。寫乙個程式,給定起始位置和目標位置,計算王 後 車 象從起始位置走到目標位置 所需的最少步數。輸入資料 第一行是測試資料的組...

演算法二 棋盤上的距離 C

題目如下 注意這裡因為下面用到了絕對值,所以一定要加上這個庫函式 using namespace std intmain else if y 0 同一行 else x,y都不為0時 cout if xiang 1 cout else cout inf return0 首先分析這個題,王,後,將是一定...