TZOJ 2755 西洋棋

2021-10-01 08:47:11 字數 1187 閱讀 2176

在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...