POJ 2251地牢大師

2021-10-03 13:31:34 字數 1827 閱讀 9729

演算法標籤 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...