hdu 1253 胜利大逃亡_三维
第一次做三维的题,这题跑g++超时了,c++过了.
#include<iostream> #include<cstdio> #include<queue> using namespace std; #define N 52 int 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; else return -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; }
不怕路长,只怕心老.