題目描述:
中國象棋博大精深,其中馬的規則最為複雜,也是最難操控的一顆棋子。
我們都知道象棋中馬走"日",比如在 (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...