zjm被困在乙個三維的空間中,現在要尋找最短路徑逃生!
空間由立方體單位構成。
zjm每次向上下前後左右移動乙個單位需要一分鐘,且zjm不能對角線移動。
空間的四周封閉。zjm的目標是走到空間的出口。
是否存在逃出生天的可能性?如果存在,則需要多少時間?
input
輸入第一行是乙個數表示空間的數量。 每個空間的描述的第一行為l,r和c(皆不超過30)。outputl表示空間的高度,r和c分別表示每層空間的行與列的大小。 隨後l層,每層r行,每行c個字元。
每個字元表示空間的乙個單元。』#『表示不可通過單元,』.『表示空白單元。 zjm的起始位置在』s』,出口為』e』。每層空間後都有乙個空行。
l,r和c均為0時輸入結束。
每個空間對應一行輸出。 如果可以逃生,則輸出如下 escaped in x minute(s). x為最短脫離時間。sample input
345
s…..###.
.##.
.###.#
#####
#####
##.##
##…#####
#####
#.###
####e13
3s##
#e####00
0
sample outpu
escaped in 11
minute
(s).
可以看出這是個bfs遍歷問題,唯一不一樣的就是用的是三維陣列。但是影響不大,只是方向變成了三維的。
用乙個陣列存放方向:
int dir[6]
[3]=
;
在bfs的時候,每次從佇列中彈出乙個座標,六個方向全都遍歷一遍,計算出下乙個位置的座標,將符合要求的座標入隊。迴圈知道隊列為空,或者走到了終點。
#include
#include
#include
using
namespace std;
struct pos
;int dir[6]
[3]=
;int l,r,c;
int a[32]
[32][
32];bool vis[32]
[32][
32];string start;
pos st;
int suc;
void
bfs(pos st)
for(
int i=
0; i<
6; i++
) vis[next.x]
[next.y]
[next.z]
=true;}
}}intmain()
else}}
}bfs
(st);if
(suc!=-1
) cout<<
"escaped in "
<" minute(s)."
>l>>r>>c;
}}
Week12 作業 B 必做題(三維空間迷宮)
一 題目描述 zjm被困在乙個三維的空間中,現在要尋找最短路徑逃生!空間由立方體單位構成。zjm每次向上下前後左右移動乙個單位需要一分鐘,且zjm不能對角線移動。空間的四周封閉。zjm的目標是走到空間的出口。是否存在逃出生天的可能性?如果存在,則需要多少時間?input 輸入第一行是乙個數表示空間的...
三維空間剛體旋轉
剛體 運動過程中不會產生形變的物體,運動過程中同乙個向量的長度和夾角都不會發生變化。剛體變換也稱為歐式變換。旋轉矩陣 四元數旋轉向量 尤拉角安裝方式 eigen庫只有標頭檔案,沒有.so和.a二進位制檔案,所以在cmakelists.txt中只需要新增標頭檔案路徑,並不需要使用target link...
BFS 三維空間迷宮
題面 你被困在乙個三維的空間中,現在要尋找最短路徑逃生!空間由立方體單位構成。每次向上下前後左右移動乙個單位需要一分鐘,且不能對角線移動。空間的四周封閉。你的目標是走到空間的出口。問是否存在逃出生天的可能性?如果存在,則需要多少時間?輸入第一行是乙個數表示空間的數量。每個空間的描述的第一行為l,r和...