POJ 2251

本文深入探讨了一个三维迷宫逃脱问题的算法实现,通过广度优先搜索(BFS)在三维空间中寻找从起点到终点的最短路径。文章详细介绍了如何利用C++进行三维数组的初始化、节点定义、边界条件判断以及广度优先搜索的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 1 #include <cstdio>
 2 #include <cmath>
 3 #include <cstring>
 4 #include <algorithm>
 5 #include <queue>
 6 #include <stack>
 7 #include <vector>
 8 #include <iomanip>
 9 using namespace std;
10 char a[35][35][35];
11 int vis[35][35][35];
12 int l,n,m,mmin;
13 int sl,sx,sy,el,ex,ey;
14 int dir[15][3]={{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}};
15 int panduan(int z,int x,int y)
16 {
17     return z>=0&&z<l&&x>=0&&x<n&&y>=0&&y<m;
18 }
19 
20 struct node
21 {
22     int x,y,z,f;
23 };
24 node be;
25 void bfs()
26 {
27     queue<node>q;
28     be.f=0;
29     q.push(be);
30     while(!q.empty())
31     {
32         node now=q.front();
33         q.pop();
34         if(a[now.z][now.x][now.y]=='E')
35         {
36             mmin=min(mmin,now.f);
37             continue;
38         }
39         for(int i=0;i<6;i++)
40         {
41             int nl=now.z+dir[i][0];
42             int nx=now.x+dir[i][1];
43             int ny=now.y+dir[i][2];
44             if(a[nl][nx][ny]!='#'&&vis[nl][nx][ny]==0&&panduan(nl,nx,ny))
45             {
46                 //printf("%d %d %d %d\n",nl,nx,ny,now.f+1);
47                 vis[nl][nx][ny]=1;
48                 node nex;
49                 nex.z=nl,nex.x=nx,nex.y=ny,nex.f=now.f+1;
50                 q.push(nex);
51             }
52         }
53     }
54 }
55 int main(int argc, char *argv[])
56 {
57     while(scanf("%d%d%d",&l,&n,&m)!=EOF)
58     {
59         if(l==0&&n==0&&m==0)
60         break;
61         for(int i=0;i<l;i++)
62         {
63             for(int j=0;j<n;j++)
64             {
65                 getchar();
66                 scanf("%s",a[i][j]);
67                 for(int k=0;k<m;k++)
68                 {
69                     if(a[i][j][k]=='S')
70                     {
71                         be.z=i;be.x=j;be.y=k;
72                     }
73                 }
74             }    
75         }
76         memset(vis,0,sizeof(vis));
77         vis[be.z][be.x][be.y]=1;
78         mmin=1e9;
79         bfs();
80         if(mmin==1e9)
81         printf("Trapped!\n");
82         else
83         printf("Escaped in %d minute(s).\n",mmin);
84     }
85     return 0;
86 }

 

转载于:https://www.cnblogs.com/huluxin/p/9813988.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值