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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

三维bfs

發布時間:2023/11/27 生活经验 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 三维bfs 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?????????????????????????????????? 勝利大逃亡

Time Limit: 4000/2000 MS (Java/Others)????Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 25112????Accepted Submission(s): 9609


Problem Description Ignatius被魔王抓走了,有一天魔王出差去了,這可是Ignatius逃亡的好機會.

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

?

Input 輸 入數據的第一行是一個正整數K,表明測試數據的數量.每組測試數據的第一行是四個正整數A,B,C和T(1<=A,B,C<=50,1& lt;=T<=1000),它們分別代表城堡的大小和魔王回來的時間.然后是A塊輸入數據(先是第0塊,然后是第1塊,第2塊......),每塊 輸入數據有B行,每行有C個正整數,代表迷宮的布局,其中0代表路,1代表墻.(如果對輸入描述不清楚,可以參考Sample Input中的迷宮描述,它表示的就是上圖中的迷宮)

特別注意:本題的測試數據非常大,請使用scanf輸入,我不能保證使用cin能不超時.在本OJ上請使用Visual C++提交.

?

Output 對于每組測試數據,如果Ignatius能夠在魔王回來前離開城堡,那么請輸出他最少需要多少分鐘,否則輸出-1.

?

Sample Input 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

?

Sample Output 11 ?? 代碼:
#include <stdio.h>
#include <string.h>int map[60][60][60];
int vt[60][60][60] ;struct N
{int x, y, z;int cnt;}s[210000], e, f;int xx[6]={0, 0, 0, 0, 1, -1};
int yy[6]={0, 0, -1, 1, 0, 0};
int zz[6]={1, -1, 0, 0, 0, 0};int a, b, c, tt;void bfs()
{int i, j=0, k=0 ;int flag = 0;e.x = 0;e.y = 0;e.z = 0;e.cnt = 0;s[k++] = e;vt[0][0][0] =1 ;while(j < k ){e = s[j++];if(e.x==a-1 && e.y==b-1 && e.z==c-1 ){if(e.cnt <= tt){printf("%d\n", e.cnt );return ;}else{printf("-1\n");return ;}}for(i=0; i<6; i++){f.x = e.x + xx[i];f.y = e.y + yy[i];f.z = e.z + zz[i];if( f.x>=0&&f.x<a &&f.y>=0&&f.y<b && f.z>=0 &&f.z<c&& vt[f.x][f.y][f.z]==0 && map[f.x][f.y][f.z]==1 ){f.cnt = e.cnt + 1;s[k++] = f;vt[f.x][f.y][f.z]=1;}}}printf("-1\n");/*	if(flag==1 && sum <tt ){printf("%d\n", sum );}else{printf("-1\n");}  */
}int main()
{int t;int i, j, k,ff;scanf("%d", &t) ;while(t--){memset(map, 0, sizeof(map ));memset(vt, 0, sizeof(vt ));k = 0;scanf("%d %d  %d %d", &a, &b, &c, &tt );for(i=0; i<a; i++){for(j=0; j<b; j++){for(k=0; k<c; k++){scanf("%d", &ff );if(ff==1)map[i][j][k] = 0;   //memset 為0,避免沖突修改一下,1代表路,0 代表墻else{map[i][j][k] = 1; }}}}if(map[a-1][b-1][c-1]==0 || a+b+c>tt) //出口處是墻 或者 可能到達出口的最短時間都比妖怪回來的時間長必然逃不了{printf("-1\n");continue;}bfs();}return 0;
}

?

轉載于:https://www.cnblogs.com/yspworld/p/3875802.html

總結

以上是生活随笔為你收集整理的三维bfs的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。