在nn的西洋棋棋盤中,給定一「馬(knight)」和一「後(queen)」的位置,問「馬」能否在m步之內(包括m步)到達「後」的位置?馬的走法是:每步棋先橫走或直走一格,然後再斜走一格,即走「日」字,沒有「中國象棋」中「蹩馬腿」的限制。比如在88的棋盤中,馬的位置為(3, 5),則下一步可以落在(1 ,6)、(1, 4)、(2, 7)、(2, 3)、(4, 7)、(4, 3)、(5, 6)或(5, 4)。
輸入資料有3行,第一行為2個正整數n和m(n <=1000000,m<=256);第二行為2個正整數kx和ky,代表「馬」所在的位置(1<=kx, ky<=n);第三行為2個正整數qx和qy,代表「後」所在的位置(1<=qx, qy<=n)。我們保證馬和後的位置不會重疊。
如果「馬」能夠在m步之內(包括m步)到達「後」的位置,則輸出:
knight can reach queen within m moves!
否則輸出:
knight cannot reach queen within m moves!
其中m為給定的馬步數。
8 23 5
7 4knight cannot reach queen within 2 moves!
看到題目發現就是用bfs,但是棋盤比較大,直接開二維陣列一定會超記憶體。所以我用了map只標記要走的格仔而不是每個格仔都先標記。還有我們可以判斷abs(ma.x-qx)>m2和abs(ma.y-qy)>m2有乙個成立時就不會在m布內到達皇后的位置。
#include
using
namespace std;
mapint,
int>
,int
> map1;
//使用map來標記馬已經走過的位置
int qx,qy;
int dir[8]
[2]=
,,,,
,,,}
;//馬能走的位置
int n,m;
struct node
;node ma;
queueque;
intcheck
(node tt)
intbfs()
que.
push
(t);}}
}return0;
}int
main()
return0;
}
python繪製西洋棋規則口訣 西洋棋口訣
1.用車鎖門 直線或橫線 2.王與王形成馬步 用自己的王逼迫對方王到角落去 3.不是馬步走馬步 想辦法按正確的走法用已方王和對方王走成馬字步的局面 4.捉車就遠離 有時聰明的對方王會來捉你的車,這時就用車離它遠點,記住 離,豎線鎖門就豎線遠離 5.對王就將軍 如果對方的王和已方王走成了對王時,就是將...
1345 西洋棋
西洋棋的棋盤是黑白相間的8 8的方格,棋子放在格仔中間。王 後 車 象的走子規則如下 王 橫 直 斜都可以走,但每步限走一格。後 橫 直 斜都可以走,每步格數不受限制。車 橫 豎均可以走,不能斜走,格數不限。象 只能斜走,格數不限。你的任務是寫乙個程式,給定起始位置和目標位置,計算王 後 車 象從起...
西洋棋皇后問題
1 八皇后問題 2 求解思路 3 實現 include include object.h include linklist.h using namespace std using namespace mylib template class queuesolution public object s...