資訊學奧賽一本通 POJ 2251 地牢大師

2021-10-04 04:26:43 字數 1734 閱讀 3231

演算法標籤 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僅區別於有三層,則三維陣列。

我們需要確認可移動方向為三維即dx=,dy=,dz=;

用bfs模板套即可。

c++ **

#include

#include

#include

using

namespace std;

const

int n=

120;

char g[n]

[n][n]

;int dist[n]

[n][n]

;//實際是statu+distance二合一了 用-1判斷沒走過

int l,r,c;

struct node

;int dx=

,dy=

,dz=

;//確定每一步有可能走的方向

intbfs

(node sta,node end));

//將符合條件的放入隊尾,以便bfs查詢可能的位置}}

return-1

;}intmain()

;else

if(g[i]

[j][z]

=='e'

)end=;}

if(bfs(sta,end)==-

1)cout<<

"escaped in "

<<

bfs(sta,end)

<<

" minute(s)."

<}return0;

}

資訊學奧賽一本通 小球(drop)

許多的小球乙個乙個的從一棵滿二叉樹上掉下來組成fbt full binary tree,滿二叉樹 每一時間,乙個正在下降的球第乙個訪問的是非葉子節點。然後繼續下降時,或者走右子樹,或者走左子樹,直到訪問到葉子節點。決定球運動方向的是每個節點的布林值。最初,所有的節點都是false,當訪問到乙個節點時...

資訊學奧賽一本通 小球(drop)

this drop is gonna last forever!許多的小球乙個乙個的從一棵滿二叉樹上掉下來組成fbt full binary tree,滿二叉樹 每一時間,乙個正在下降的球第乙個訪問的是非葉子節點。然後繼續下降時,或者走右子樹,或者走左子樹,直到訪問到葉子節點。決定球運動方向的是每個...

資訊學奧賽一本通(C 版)

資訊學奧賽一本通 c 版 總目錄 1.資訊學奧賽一本通 c 版 刷題 記錄 2.資訊學奧賽一本通 c 版 第一部分 c 語言 第一章 c 語言入門 3.資訊學奧賽一本通 c 版 第一部分 c 語言 第二章 順序結構程式設計 4.資訊學奧賽一本通 c 版 第一部分 c 語言 第三章 程式的控制結構 5...