日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NYOJ-523 亡命逃窜(三维立体的BFS)

發(fā)布時間:2025/3/13 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NYOJ-523 亡命逃窜(三维立体的BFS) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

亡命逃竄

時間限制:1000 ms ?|? 內(nèi)存限制:65535 KB 難度:4 描述

?

? ??從前有個叫hck的騎士,為了救我們美麗的公主,潛入魔王的老巢,夠英雄吧。不過英雄不是這么好當?shù)摹_@個可憐的娃被魔王抓住了,倍受折磨,生死一線。有一天魔王出去約會了,這可是一個千載難逢的逃命機會。你現(xiàn)在的任務(wù)就是判斷一下這個英雄未遂的孩子能不能在魔王回來之前逃出魔王的城堡,成功逃生,最后迎娶我們美麗的公主。

? ? 魔王住在一個城堡里,城堡是一個A*B*C的立方體,可以被表示成A個B*C的矩陣,剛開始hck被關(guān)在(0,0,0)的位置,離開城堡的門在(A-1,B-1,C-1)的位置,現(xiàn)在知道魔王將在T分鐘后回到城堡,hck每分鐘能從一個坐標走到相鄰的六個坐標中的其中一個.現(xiàn)在給你城堡的地圖,請你計算出hck能否在魔王回來前離開城堡(只要走到出口就算離開城堡,如果走到出口的時候魔王剛好回來也算逃亡成功),如果可以請輸出需要多少分鐘才能離開,如果不能則輸出-1.

如圖所示,輸入數(shù)據(jù)中的第0塊的最左上角是hck被關(guān)的地方,第A-1塊的最右下角是城堡的出口。按照圖中紅色箭頭方向移動每一層以構(gòu)成整個城堡

?

?

輸入
輸入數(shù)據(jù)的第一行是一個正整數(shù)K,表明測試數(shù)據(jù)的數(shù)量. 每組測試數(shù)據(jù)的第一行是四個正整數(shù)A,B,C和T(1<=A,B,C<=50,1<=T<=1000),它們分別代表城堡的大小和魔王回來的時間.
然后是A塊輸入數(shù)據(jù)(先是第0塊,然后是第1塊,第2塊......),每塊輸入數(shù)據(jù)有B行,每行有C個正整數(shù),代表迷宮的布局,其中0代表路,1代表墻.
(如果對輸入描述不清楚,可以參考上面的迷宮描述,它表示的就是上圖中的迷宮)
輸出
對于每組測試數(shù)據(jù),如果hck能夠在魔王回來前離開城堡,那么請輸出他最少需要多少分鐘,否則輸出-1.
樣例輸入
2 3 2 2 10 0 1 0 0 1 1 1 0 0 0 0 1 3 3 4 20 0 1 1 1 0 0 1 1 0 1 1 1 1 1 1 1 1 0 0 1 0 1 1 1 0 0 0 0 0 1 1 0 0 1 1 0
樣例輸出
-1 11
來源
HDU
上傳者
♀隨風♀
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <queue> 5 6 using namespace std; 7 8 int map[51][51][51]; 9 int dir[6][3]={{- 1,0,0},{0,-1,0},{0,0,-1},{1,0,0},{0,1,0},{0,0,1}}; 10 11 struct node 12 { 13 int x; 14 int y; 15 int z; 16 int time; 17 }; 18 19 int BFS(int a, int b, int c) 20 { 21 queue <node> q; 22 node t1, t2; 23 t1.time = t1.x = t1.y = t1.z = 0; 24 if(t1.x == a-1 && t1.y == b-1 && t1.z == c-1) 25 return t1.time; 26 27 q.push(t1); 28 map[0][0][0] = 1; 29 while(!q.empty()) 30 { 31 t1 = q.front(); 32 q.pop(); 33 for(int i = 0; i < 6; ++i) 34 { 35 t2.x = t1.x + dir[i][0]; 36 t2.y = t1.y + dir[i][1]; 37 t2.z = t1.z + dir[i][2]; 38 t2.time = t1.time + 1; 39 if(t2.x<0 || t2.x>=a || t2.y<0 || t2.y>=b || t2.z<0 || t2.z>=c || map[t2.x][t2.y][t2.z]) 40 continue; 41 if(t2.x == a-1 && t2.y == b-1 && t2.z == c-1) 42 return t2.time; 43 q.push(t2); 44 map[t2.x][t2.y][t2.z] = 1; 45 } 46 } 47 return -1; 48 } 49 50 int main() 51 { 52 int T; 53 scanf("%d",&T); 54 while (T--) 55 { 56 int a, b, c, t; 57 scanf("%d%d%d%d", &a, &b, &c, &t); 58 for(int i = 0; i < a; ++i) 59 for(int j = 0; j < b; ++j) 60 for(int k = 0; k < c; ++k) 61 scanf("%d", &map[i][j][k]); 62 63 int sum = BFS(a, b, c); 64 if(sum <= t) 65 printf("%d\n", sum); 66 else 67 printf("-1\n"); 68 } 69 return 0; 70 }

?

轉(zhuǎn)載于:https://www.cnblogs.com/dongsheng/archive/2013/06/03/3116071.html

總結(jié)

以上是生活随笔為你收集整理的NYOJ-523 亡命逃窜(三维立体的BFS)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。