链接:点击打开链接
题意:三维搜索‘S’为起点,‘E’为终点,求走出的最短时间
代码:
#include <iostream> #include <stdio.h> #include <string.h> #include <math.h> #include <queue> using namespace std; int xx[]={1,-1,0,0,0,0}; //方向向量 int yy[]={0,0,1,-1,0,0}; int zz[]={0,0,0,0,1,-1}; int p,q,r; char str[35][35][35]; struct node{ int x,y,z,sum; }; int bfs(node st,node en){ int i; queue<node>qu; node cur,temp; qu.push(st); while(qu.size()){ cur=qu.front();qu.pop(); if(cur.x==en.x&&cur.y==en.y&&cur.z==en.z) return cur.sum; //找到之后直接返回走的步数 for(i=0;i<6;i++){ temp.x=cur.x+xx[i]; temp.y=cur.y+yy[i]; temp.z=cur.z+zz[i]; temp.sum=cur.sum+1; if(temp.x>=0&&temp.x<p&&temp.y>=0&&temp.y<q&&temp.z>=0&&temp.z<r) if(str[temp.x][temp.y][temp.z]!='#'){ qu.push(temp); str[temp.x][temp.y][temp.z]='#'; //走过之后就变成'#',省掉一个数组记录 } //是否走过 } } return -1; } int main(){ int i,j,k,sumsum; node st,en; while(scanf("%d%d%d",&p,&q,&r)!=EOF&&(p||q||r)){ for(i=0;i<p;i++) for(j=0;j<q;j++) for(k=0;k<r;k++){ cin>>str[i][j][k]; if(str[i][j][k]=='S') st.x=i,st.y=j,st.z=k,st.sum=0; else if(str[i][j][k]=='E') en.x=i,en.y=j,en.z=k; } sumsum=bfs(st,en); if(sumsum==-1) printf("Trapped!\n"); else printf("Escaped in %d minute(s).\n",sumsum); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-15 12:06:47