原来光搜是用队列的,深搜才用栈,我好白痴啊,居然搞错了
三维的基础的广搜题

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> #include<queue> using namespace std; #define MAXN 60 int map[MAXN][MAXN][MAXN],t,a,b,c; bool vis[MAXN][MAXN][MAXN]; struct tt { int x,y,z,step; }; queue<tt>q; int xx[6]={0,0,1,-1,0,0}; int yy[6]={1,-1,0,0,0,0}; int zz[6]={0,0,0,0,1,-1}; int bfs() { if(a==1&&b==1&&c==1)return 0; while(!q.empty()) q.pop(); memset(vis,false,sizeof(vis)); tt front,rear,temp; front.x=0;front.y=0;front.z=0;front.step=0; q.push(front); vis[0][0][0]=true; while(!q.empty()) { temp=q.front(); q.pop(); if(temp.x+1==a&&temp.y+1==b&&temp.z+1==c) return temp.step;//原来是这个放错地方了,应该对出栈的数据进行检验 for(int i=0;i<6;i++) { rear.x=temp.x+xx[i]; rear.y=temp.y+yy[i]; rear.z=temp.z+zz[i]; rear.step=temp.step+1; if(rear.x>=0&&rear.x<a&&rear.y>=0&&rear.y<b&&rear.z>=0&&rear.z<c&&map[rear.x][rear.y][rear.z]==0&&vis[rear.x][rear.y][rear.z]==false) { q.push(rear); vis[rear.x][rear.y][rear.z]=true; } } } return t+1; } int main() { int n,i,j,k,ans; scanf("%d",&n); while(n--) { scanf("%d%d%d%d",&a,&b,&c,&t); for(i=0;i<a;i++) { for(j=0;j<b;j++) { for(k=0;k<c;k++) { scanf("%d",&map[i][j][k]); } } } ans=bfs(); if(ans>t) printf("-1 "); else printf("%d ",ans); } return 0; }