图论 --- 三维空间bfs
【题目大意】
给你一个三维的迷宫,让你计算从入口走到出口最少步数。
【题目分析】
其实和二维迷宫还是一样的,还是用队列来做,由于BFS算法一般是不需要回溯的,所以我们就用不着还用一个visit数组来记录是否访问过,直接将走过的结点置为不可走就可。

//Memory Time // 356K 32MS #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<queue> #include<algorithm> using namespace std; struct Node { int x,y,z; int step; }; queue<Node> que; char Map[50][50][50]; int sx,sy,sz; int ex,ey,ez; int dir_x[]={-1,1,0,0,0,0}; int dir_y[]={0,0,-1,1,0,0}; int dir_z[]={0,0,0,0,1,-1}; void read(int n,int row,int col) { int i,j,k; for(i=0;i<n;i++) { for(j=0;j<row;j++) { for(k=0;k<col;k++) { cin>>Map[i][j][k]; if(Map[i][j][k]=='S') { sx=i; sy=j; sz=k; } else if(Map[i][j][k]=='E') { ex=i; ey=j; ez=k; } } getchar(); } getchar(); } } void BFS() { Node q; q.x=sx; q.y=sy; q.z=sz; q.step=0; que.push(q); while(!que.empty()) { Node tp=que.front(); que.pop(); int x=tp.x; int y=tp.y; int z=tp.z; int step=tp.step; for(int i=0;i<6;i++) { int tx=x+dir_x[i]; int ty=y+dir_y[i]; int tz=z+dir_z[i]; if(Map[tx][ty][tz]=='.') { Node Q; Q.x=tx; Q.y=ty; Q.z=tz; Q.step=step+1; que.push(Q); Map[tx][ty][tz]='#'; } else if(tx==ex&&ty==ey&&tz==ez) { cout<<"Escaped in "<<step+1<<" minute(s)."<<endl; return; } } } cout<<"Trapped!"<<endl; } int main() { // freopen("cin.txt", "r", stdin); int i, j, k; int n,row,col; while(cin>>n>>row>>col&&(n+row+col)) { while(!que.empty()) que.pop(); getchar(); read(n,row,col); BFS(); } return 0; }
作者:北岛知寒
出处:https://www.cnblogs.com/crazyacking/p/3762946.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?