題目連結:
題目大意:
第一列給定一正整數 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)的題目,如
此題。對於每個國王在的位置,看該位置有沒有超出地圖外面或是抵達了先前紀錄的敵人的位置。沒有就將該位置加進佇列裡。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。