深度優先搜尋之中國象棋

2021-10-07 22:01:41 字數 1543 閱讀 2810

題目描述:

中國象棋博大精深,其中馬的規則最為複雜,也是最難操控的一顆棋子。

我們都知道象棋中馬走"日",比如在 (2, 4)(2,4) 位置的乙個馬,跳一步能到達的位置有 (0, 3)(0,3),(0, 5)(0,5),(1, 2)(1,2),(1, 6)(1,6),(3, 2)(3,2),(3, 6)(3,6),(4, 3)(4,3),(4, 5)(4,5)。

蒜頭君正在和花椰妹下棋,蒜頭君正在進行戰略布局,他需要把在 (x,y)(x,y) 位置的馬跳到 (x』, y』)(x′,y

′) 位置,以達到威懾的目的。

但是棋盤大小有限制,棋盤是乙個 10 \times 910×9 的網格,左上角座標為 (0, 0)(0,0),右下角座標為 (9, 8)(9,8),馬不能走出棋盤,並且有些地方已經有了棋子,馬也不能跳到有棋子的點。

蒜頭君想知道,在不移動其他棋子的情況下,能否完成他的戰略目標。

輸入格式

輸入一共 1010 行,每行乙個長度為 99 的字串。

輸入表示這個棋盤,我們用』.『表示空位置,用』#'表示該位置有棋子,用』s』表示初始的馬的位置,用』t』表示馬需要跳到的位置。

輸入保證一定只存在乙個』s』和乙個』t』。

輸出格式

如果在不移動其他棋子的情況下,馬能從』s』跳到』t』,那麼輸出一行"yes",否則輸出一行"no"。

樣例輸入 複製

.#…#s#

…#.#.#…

…##.#…#

…##.

…t……#.#…

…#……###…

….##…

樣例輸出 複製

yes**描述:

#include

#include

using

namespace std;

string map[10]

;bool vis[10]

[9];

int n,m;

int step[8]

[2]=

,,,,

,,,}

;boolin(

int x,

int y)

bool

dfs(

int x,

int y)

vis[x]

[y]=

true

;for

(int i=

0;i<

8;i++)}

}//vis[x][y]=false;

//map[x][y]='.';

return

false;}

intmain()

int x,y;

for(

int i=

0;i<

10;i++)}

}if(dfs

(x,y)

)else

}

程式設計之美之中國象棋問題

一 題目原型 下過中國象棋的朋友都知道,雙方的 將 和 帥 相隔遙遠,並且它們不能照面。在象棋殘局中,許多高手能利用這一規則走出精妙的殺招。假設棋盤上只有 將 和 帥 二子 如圖 1 3所示 為了下面敘述方便,我們約定用a表示 將 b表示 帥 那麼a和b的運動將被限制在己方的3x3的格仔中,a b可...

10馬踏棋盤之中國象棋

題目 在半個中國象棋棋盤上,馬在左下角 1,1 處,馬走日字,而且只能往右走,不能向左,可以上下,求起點到 m,n 處有幾種不同的走法。基本思想 遞迴回溯探索演算法 測試資料 9 5 37 8 4 20 3 2 1 4 4 2 題目 在半個中國象棋棋盤上,馬在左下角 1,1 處,馬走日字,而且只能往...

中國象棋2

using system using system.collections.generic using system.linq using system.text using system.drawing namespace chinesechess public override bool mov...