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