小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先生是乙個西洋棋高手,他聲稱在棋盤上將騎士棋子從一點移動到另外一點,沒有人比他快,你敢挑戰他嗎?你的任務是程式...