#include using std::queue; class point3d{ public: int x,y,z; inline void set(int nx, int ny, int nz){ x=nx; y=ny; z=nz; }; inline point3d(){ set(0,0,0); } inline void keysit(int k){ z |= k; }; #ifdef DEB void print(char *s, char *endl="\n"){ printf("%s{%2d,%2d,%2d}%s",s,x,y,z,endl); }; #else inline void print(char *s, char *endl="\n"){}; #endif }; point3d nextpoint(point3d p, int pcase){ switch(pcase){ case 0: p.set(p.x+1, p.y, p.z); break; case 1: p.set(p.x-1, p.y, p.z); break; case 2: p.set(p.x, p.y+1, p.z); break; case 3: p.set(p.x, p.y-1, p.z); break; }; return p; }; //Globals char ***map; //map[z][y][x] in 3D :P const int mapmaxl = 100 + 3 + 1; int R,C; const char MRK = ' '; // MaRKer int Sx,Sy; queue Qp; queue Qd; #define mapP(POINT) map[POINT.z][POINT.y][POINT.x] void init(){ int x,y,z; x=1; map = new char**[16]; for(z=0;z<16;++z){ map[z] = new char *[mapmaxl]; for(y=0;y