hdu 1253 胜利大逃亡_三维

来源:互联网 发布:远程教学用什么软件 编辑:程序博客网 时间:2024/06/06 14:09

第一次做三维的题,这题跑g++超时了,c++过了.

#include<iostream>#include<cstdio>#include<queue>using namespace std;#define N 52int map[N][N][N],visit[N][N][N],a,b,ttime,c;struct Node{int i,j,k;int time;};int dir[][3]={{1,0,0},{0,1,0},{0,0,1},{-1,0,0},{0,-1,0},{0,0,-1}};int bfs(){Node t,tmp,start;int i;queue<Node>q;start.i=start.j=start.k=1;start.time=ttime;q.push(start);visit[1][1][1]=1;while(!q.empty()){t=q.front();q.pop();if(t.i==a&&t.j==b&&t.k==c&&t.time>=0)return ttime-t.time;for(i=0;i<6;i++){tmp=t;tmp.i+=dir[i][0];tmp.j+=dir[i][1];tmp.k+=dir[i][2];tmp.time--;if(map[tmp.i][tmp.j][tmp.k]==-1||map[tmp.i][tmp.j][tmp.k]==1)continue;if(visit[tmp.i][tmp.j][tmp.k])continue;if(tmp.i==a&&tmp.j==b&&tmp.k==c){if(tmp.time>=0)return ttime-tmp.time;elsereturn -1;}if(tmp.time>=0){q.push(tmp);visit[tmp.i][tmp.j][tmp.k]=1;}}}return -1;}int main(){int t,i,j,k;scanf("%d",&t);while(t--){scanf("%d%d%d%d",&a,&b,&c,&ttime);memset(visit,0,sizeof(visit));memset(map,-1,sizeof(map));for(i=1;i<=a;i++)for(j=1;j<=b;j++)for(k=1;k<=c;k++)scanf("%d",&map[i][j][k]);printf("%d\n",bfs());}return 0;}