原来光搜是用队列的,深搜才用栈,我好白痴啊,居然搞错了
三维的基础的广搜题
#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[]={,,,-,,};
int yy[]={,-,,,,};
int zz[]={,,,,,-};
int bfs()
{
if(a==&&b==&&c==)return ;
while(!q.empty())
q.pop();
memset(vis,false,sizeof(vis));
tt front,rear,temp;
front.x=;front.y=;front.z=;front.step=;
q.push(front);
vis[][][]=true;
while(!q.empty())
{
temp=q.front();
q.pop();
if(temp.x+==a&&temp.y+==b&&temp.z+==c)
return temp.step;//原来是这个放错地方了,应该对出栈的数据进行检验
for(int i=;i<;i++)
{
rear.x=temp.x+xx[i];
rear.y=temp.y+yy[i];
rear.z=temp.z+zz[i];
rear.step=temp.step+;
if(rear.x>=&&rear.x<a&&rear.y>=&&rear.y<b&&rear.z>=&&rear.z<c&&map[rear.x][rear.y][rear.z]==&&vis[rear.x][rear.y][rear.z]==false)
{
q.push(rear);
vis[rear.x][rear.y][rear.z]=true;
}
}
}
return t+;
} int main()
{
int n,i,j,k,ans;
scanf("%d",&n);
while(n--)
{
scanf("%d%d%d%d",&a,&b,&c,&t);
for(i=;i<a;i++)
{
for(j=;j<b;j++)
{
for(k=;k<c;k++)
{
scanf("%d",&map[i][j][k]);
}
}
}
ans=bfs();
if(ans>t)
printf("-1\n");
else
printf("%d\n",ans);
}
return ;
}