切換
舊版
前往
大廳
主題

ZeroJudge - d191: 11352 - Crazy King 解題心得

Not In My Back Yard | 2020-07-06 01:39:06 | 巴幣 0 | 人氣 204

題目連結:


題目大意:
第一列給定一正整數 T (T ≦ 100),代表測試資料的筆數。每筆第一列給定兩正整數 M 、 N (M 、 N ≦ 100),代表有一個 M × N 的地圖格子。接著有 M 列輸入,每列給定 N 個字元,代表這個地圖的內容。

字元只會是「.」、「Z」、「A」或是「B」的其中一個,依序代表空地、敵人的馬、 A 王國以及 B 王國的。而現在 A 王國的國王要去 B 王國。

國王的移動為周遭的八個格子,意即他可以往左上、上、右上、右、右下、下、左下、左八個方向移動一格。而國王不能移到有敵人的馬存在的格子,也不能移動到敵人的馬能到的地方(除非那裡正是 B 王國)。

敵人的馬移動方式如下(正如西洋棋中的馬一致):

求 A 國國王到 B 王國的最短距離。如果無法到達則輸出「King Peter, you can't go now!」;否則輸出「Minimal possible length of a trip is L」,其中 L 代表最短距離(格子)。



範例輸入:
4
5 5
.Z..B
..Z..
Z...Z
.Z...
A....
3 2
ZB
.Z
AZ
6 5
....B
.....
.....
..Z..
.....
A..Z.
3 3
ZZ.
...
AB.


範例輸出:
King Peter, you can't go now!
Minimal possible length of a trip is 2
King Peter, you can't go now!
Minimal possible length of a trip is 1


解題思維:
先紀錄敵人的馬的位置以及其能走到的位置。

接著就是典型的廣度優先搜尋(BFS)的題目,如此題。對於每個國王在的位置,看該位置有沒有超出地圖外面或是抵達了先前紀錄的敵人的位置。沒有就將該位置加進佇列裡。

此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作