刚开始
memset(map,'#',sizeof(map));
memset(mins,-1,sizeof(map));初始化错了。导致一直WA,草。。。
不过改过来以后,瞬间0MS跑过。。。哎,自己还是太弱了,
#include<iostream> #include<cstring> #include<queue> using namespace std; #define MAX_N 35 typedef struct p{ int x,y,z; }p; char map[MAX_N][MAX_N][MAX_N]; int l,n,m,mins[MAX_N][MAX_N][MAX_N]; int step[18]={1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1}; p s,e; void Init(){ memset(map,'#',sizeof(map)); memset(mins,-1,sizeof(mins)); for(int i=1;i<=l;i++){ for(int j=1;j<=n;j++){ cin>>(map[i][j]+1); for(int k=1;k<=m;k++){ if(map[i][j][k]=='S') s.z=i,s.x=j,s.y=k; if(map[i][j][k]=='E') e.z=i,e.x=j,e.y=k; } } } } void putstruct(p u){ cout<<"Z : "<<u.z<<" X : "<<u.x<<" Y : "<<u.y<<endl; } void bfs(){ queue<p> q; q.push(s); mins[s.z][s.x][s.y]=0; while(!q.empty()){ p t=q.front(); q.pop(); for(int i=0;i<18;i+=3){ p d; d.z=t.z+step[i]; d.x=t.x+step[i+1]; d.y=t.y+step[i+2]; // putstruct(d); if(map[d.z][d.x][d.y]=='#'|| mins[d.z][d.x][d.y]>=0 ) continue; mins[d.z][d.x][d.y]=mins[t.z][t.x][t.y]+1; // cout<<mins[d.z][d.x][d.y]<<endl; q.push(d); if(d.x==e.x && d.y==e.y && d.z==e.z) return ; } } } void output(){ for(int i=1;i<=l;i++,cout<<endl) for(int j=1;j<=n;j++,cout<<endl) for(int k=1;k<=m;k++) cout<<mins[i][j][k]<<" "; } void outmap(){ for(int i=1;i<=l;i++,cout<<endl) for(int j=1;j<=n;j++,cout<<endl) for(int k=1;k<=m;k++) cout<<map[i][j][k]<<" "; } int main(){ while(cin>>l>>n>>m && n && l && m){ Init(); // outmap(); bfs(); // output(); if(mins[e.z][e.x][e.y]<0) cout<<"Trapped!"<<endl; else{ // if(mins[e.z][e.x][e.y]==1) // cout<<"Escaped in "<<mins[e.z][e.x][e.y]<<" minute."<<endl; // else cout<<"Escaped in "<<mins[e.z][e.x][e.y]<<" minute(s)."<<endl; } } return 0; }