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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

魔戒(BFS+四维数组)

發(fā)布時間:2025/3/21 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 魔戒(BFS+四维数组) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Description
藍色空間號和萬有引力號進入了四維水洼,發(fā)現(xiàn)了四維物體–魔戒。
這里我們把飛船和魔戒都抽象為四維空間中的一個點,分別標為 “S” 和 “E”。空間中可能存在障礙物,標為 “#”,其他為可以通過的位置。
現(xiàn)在他們想要盡快到達魔戒進行探索,你能幫他們算出最小時間是最少嗎?我們認為飛船每秒只能沿某個坐標軸方向移動一個單位,且不能越出四維空間。
Input
輸入數(shù)據(jù)有多組(數(shù)據(jù)組數(shù)不超過 30),到 EOF 結束。
每組輸入 4 個數(shù) x, y, z, w 代表四維空間的尺寸(1 <= x, y, z, w <= 30)。
接下來的空間地圖輸入按照 x, y, z, w 軸的順序依次給出,你只要按照下面的坐標關系循環(huán)讀入即可。
for 0, x-1
for 0, y-1
for 0, z-1
for 0, w-1
保證 “S” 和 “E” 唯一。

Output
對于每組數(shù)據(jù),輸出一行,到達魔戒所需的最短時間。
如果無法到達,輸出 “WTF”(不包括引號)。

Sample
Input

2 2 2 2 .. .S .. #. #. .E .# .. 2 2 2 2 .. .S #. ## E. .# #. ..

Output

1 3 #include<bits/stdc++.h>const int N = 55; using namespace std;int A,B,C,D; char mp[N][N][N][N]; bool vis[N][N][N][N]; int dirx[]= {0, 0, 0, 0, 0, 0, 1, -1}; int diry[]= {0, 0, 0, 0, 1, -1, 0, 0}; int dirz[]= {0, 0, 1, -1, 0, 0, 0, 0}; int dirw[]= {1, -1, 0, 0, 0, 0, 0, 0}; int flag; int aa, bb, cc, dd;struct node {int x;int y;int z;int w;int sum; }; int judge(int x, int y, int z, int w) {if (x >= 0 && x < A && y >= 0 && y < B && z >= 0 && z < C && w >= 0 && w < D && vis[x][y][z][w] == 0 && mp[x][y][z][w] != '#')return 1;return 0; } void bfs(int aa, int bb, int cc, int dd) {queue<node>Q;node a;a.x = aa;a.y = bb;a.z = cc;a.w = dd;a.sum = 0;vis[aa][bb][cc][dd] = 1;Q.push(a);flag = 1;while (!Q.empty()){a = Q.front();Q.pop();if (mp[a.x][a.y][a.z][a.w] == 'E'){printf ("%d\n", a.sum);flag = 0;break;}for (int i = 0; i < 8; i++){node b;b = a;b.x += dirx[i];b.y +=diry[i];b.z += dirz[i];b.w += dirw[i];if (judge(b.x, b.y, b.z, b.w)){b.sum++;vis[b.x][b.y][b.z][b.w] = 1;Q.push(b);}}}if (flag)printf ("WTF\n"); } int main () {while(cin >> A >> B >> C >> D){getchar();for (int i = 0; i < A; i++){for (int j = 0; j < B; j++){for (int k = 0; k < C; k++){for(int l = 0; l < D; l++){cin >> mp[i][j][k][l];if (mp[i][j][k][l] == 'S'){aa = i;bb = j;cc = k;dd = l;}}getchar();}}}memset(vis, 0, sizeof(vis));bfs(aa, bb, cc, dd);}return 0; }

總結

以上是生活随笔為你收集整理的魔戒(BFS+四维数组)的全部內容,希望文章能夠幫你解決所遇到的問題。

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