演算法標籤 bfs你現在被困在乙個三維地牢中,需要找到最快脫離的出路!
地牢由若干個單位立方體組成,其中部分不含岩石障礙可以直接通過,部分包含岩石障礙無法通過。
向北,向南,向東,向西,向上或向下移動乙個單元距離均需要一分鐘。
你不能沿對角線移動,迷宮邊界都是堅硬的岩石,你不能走出邊界範圍。
請問,你有可能逃脫嗎?
如果可以,需要多長時間?
輸入格式
輸入包含多組測試資料。
每組資料第一行包含三個整數 l,r,c 分別表示地牢層數,以及每一層地牢的行數和列數。
接下來是 l 個 r 行 c 列的字元矩陣,用來表示每一層地牢的具體狀況。
每個字元用來描述乙個地牢單元的具體狀況。
其中, 充滿岩石障礙的單元格用」#」表示,不含障礙的空單元格用」.」表示,你的起始位置用」s」表示,終點用」e」表示。
每乙個字元矩陣後面都會包含乙個空行。
當輸入一行為」0 0 0」時,表示輸入終止。
輸出格式
每組資料輸出乙個結果,每個結果佔一行。
如果能夠逃脫地牢,則輸出」escaped in x minute(s).」,其中x為逃脫所需最短時間。
資料範圍
1≤l,r,c≤100
輸入樣例:3 4 5
s....
.###.
.##..
###.#
#####
#####
##.##
##...
#####
#####
#.###
####e
1 3 3
s###e#
###0 0 0
輸出樣例:escaped in 11 minute(s).
思路
本題與一般的裸bfs僅區別於有三層,則三維陣列,bfs找最短路徑。
我們需要確認可移動方向為三維即dx=,dy=,dz=;
。
用bfs模板套即可。
c++ **
#include
#include
#include
#include
#include
using
namespace std;
const
int n=
110;
int l,r,c;
struct node//因為是三維 所以不能用pair
;char g[n]
[n][n]
;int dist[n]
[n][n]
;//實際是statu+distance二合一了 用-1判斷沒走過
int dx=
,dy=
,dz=
;//確定每一步有可能走的方向
intbfs
(node st,node ed));
//講符合條件的放入隊尾,以便bfs查詢可能的位置}}
return-1
;}intmain()
;else
if(g[i]
[j][k]
=='s'
)st=
;//找到開始與結束地點}if
(bfs
(st,ed)==-
1)cout<<
"escaped in "
<<
bfs(st,ed)
<<
" minute(s)."
/輸出答案
}return0;
}
資訊學奧賽一本通 POJ 2251 地牢大師
演算法標籤 bfs你現在被困在乙個三維地牢中,需要找到最快脫離的出路!地牢由若干個單位立方體組成,其中部分不含岩石障礙可以直接通過,部分包含岩石障礙無法通過。向北,向南,向東,向西,向上或向下移動乙個單元距離均需要一分鐘。你不能沿對角線移動,迷宮邊界都是堅硬的岩石,你不能走出邊界範圍。請問,你有可能...
68 地牢逃脫
個人水平有限,請見諒!給定乙個 n 行 m 列的地牢,其中 表示可以通行的位置,x 表示不可通行的障礙,牛牛從 x0 y0 位置出發,遍歷這個地牢,和一般的遊戲所不同的是,他每一步只能按照一些指定的步長遍歷地牢,要求每一步都不可以超過地牢的邊界,也不能到達障礙上。地牢的出口可能在任意某個可以通行的位...
POJ 2251(基礎三維BFS)
poj2251 在乙個三維格仔裡面,有兩種格仔,一種可以走一種不能。給定乙個起點和終點問從起點最少走多少步可以到達終點。很基礎的一道bfs,在這裡記錄一下以後處理類似的問題乙個技巧 通過xx yy zz陣列實現乙個人迴圈將乙個節點周圍的元素入隊。include include include inc...