白騎士的移動 搜尋

2021-10-06 13:03:25 字數 2807 閱讀 5498

小s第一次接觸西洋棋。他發現西洋棋中的knight棋子的移動方式和中國象棋中的馬類似,移動方式如圖所示。

於是小s在棋盤上隨意擺上了一些棋子,其中包括一枚白騎士、一枚黑皇后、若干黑戰車和若干黑主教。

小s想知道,如何能在避開黑戰車和黑主教的攻擊範圍的前提下,花費更少的步數吃掉黑皇后。

輸入格式:

輸入僅包含一組樣例。

一組樣例包含8行(分別對應1-8行),每行包含8個字元,每個字元代表對應行對應列的棋盤格仔狀況。

其中』 . 『代**子上沒有擺放任何棋子;』 k '代**子上擺放的是白騎士; 』 q '代**子上擺放的是黑皇后; 』 r '代**子上擺放的是黑戰車; 』 b '代**子上擺放的是黑主教。

注:題目保證白騎士的初始位置不在黑戰車和黑主教的攻擊範圍內。

輸出格式:

如果白騎士可以在避開黑戰車和黑主教的攻擊的情況下吃掉黑皇后,則輸出花費步數的最小值;否則輸出"checkmate"。

輸入樣例1:

r.b.qb.r……

…………

.k…輸出樣例1:

4輸入樣例2:

…rr.q

….k………

………輸出樣例2:

checkmate

#include

using

namespace std;

char a[10]

[10];

int vis[10]

[10];

int tv[10]

[10];

int dir1[4]

[2]=

,,,}

;int dir2[4]

[2]=

,,,}

;struct node

;voidr(

int x,

int y));

vis[x]

[y]=1;

tv[x]

[y]=1;

while

(!q.

empty()

)int tx = nex.x + dir1[i][0

];int ty = nex.y + dir1[i][1

];if(tx<

0|| ty<

0|| tx>=

8|| tx>=8)

continue;if

(a[tx]

[ty]

=='q'

|| a[tx]

[ty]

=='r'

|| a[tx]

[ty]

=='b'

)continue;if

(tv[tx]

[ty]==1

)continue

; tv[tx]

[ty]=1

; vis[tx]

[ty]=1

; q.

push()

;}}}

voidb(

int x,

int y));

vis[x]

[y]=1;

tv[x]

[y]=1;

while

(!q.

empty()

)int tx = nex.x + dir2[i][0

];int ty = nex.y + dir2[i][1

];if(tx<

0|| ty<

0|| tx>=

8|| tx>=8)

continue;if

(a[tx]

[ty]

=='q'

|| a[tx]

[ty]

=='r'

|| a[tx]

[ty]

=='b'

)continue;if

(tv[tx]

[ty]==1

)continue

; tv[tx]

[ty]=1

; vis[tx]

[ty]=1

; q.

push()

;}}}

int dir[8]

[2]=

,,,,

,,,}

;int

bfs(

int x,

int y,

int x1,

int y1));

while

(!q.

empty()

));}

}return0;

}int

main()

int x, y, x1, y1;

for(

int i =

0; i <

8; i ++)if

(a[i]

[j]==

'q')

if(a[i]

[j]==

'r')

r(i, j);if

(a[i]

[j]==

'b')

b(i, j);}

}int flag =

bfs(x,y,x1,y1);if

(flag ==

0) cout <<

"checkmate"

<< endl;

else cout << flag << endl;

return0;

}

A 移動的騎士

time limit 1000 1000ms c others memory limit 65536 65536kb c others problem description somurolov先生是乙個西洋棋高手,他聲稱在棋盤上將騎士棋子從一點移動到另外一點,沒有人比他快,你敢挑戰他嗎?你的任務是...

白騎士的移動 20分 佇列實現

小s第一次接觸西洋棋。他發現西洋棋中的knight棋子的移動方式和中國象棋中的馬類似,移動方式如圖所示。於是小s在棋盤上隨意擺上了一些棋子,其中包括一枚白騎士 一枚黑皇后 若干黑戰車和若干黑主教。小s想知道,如何能在避開黑戰車和黑主教的攻擊範圍的前提下,花費更少的步數吃掉黑皇后。注1 戰車的攻擊範圍...

nenuoj 1364 移動的騎士

移動的騎士 time limit 1000ms memory limit 65536k total submit 263 accepted 163 description somurolov先生是乙個西洋棋高手,他聲稱在棋盤上將騎士棋子從一點移動到另外一點,沒有人比他快,你敢挑戰他嗎?你的任務是程式...