hud 1240 Asteroids!.cpp
#include<iostream> #include<cstring> #include<cmath> #include<algorithm> #include<stack> #include<cstdio> #include<queue> #include<map> #include<vector> #include<set> using namespace std; const int maxn=1010; const int INF=0x3fffffff; typedef long long LL; //三维BFS struct node{ int x,y,z; int num; }; int dis[6][3]={{0,1,0},{0,-1,0},{1,0,0},{-1,0,0},{0,0,1},{0,0,-1}}; int n; int sx,sy,sz,ex,ey,ez; int mp[12][12][12]; int step[12][12][12]; int tot=0; void bfs(int z,int x,int y){ node a; a.x=sx;a.y=sy;a.z=sz; a.num=0; step[sz][sx][sy]=0; queue<node> q; q.push(a); while(!q.empty()){ node u=q.front(); q.pop(); //先判断 if(u.x==ex&&u.z==ez&&u.y==ey){ tot=u.num; return; } for(int i=0;i<6;i++){ int xx=u.x+dis[i][0]; int yy=u.y+dis[i][1]; int zz=u.z+dis[i][2]; if(xx>=0&&xx<n&&yy>=0&&yy<n&&zz>=0&&zz<n&&mp[zz][xx][yy]!=INF){ if(step[zz][xx][yy]>step[u.z][u.x][u.y]+1){ step[zz][xx][yy]=step[u.z][u.x][u.y]+1; mp[zz][xx][yy]=INF; node next; next.x=xx;next.y=yy;next.z=zz; next.num=u.num+1; q.push(next); } } } } } int main(){ char st[21],ed[21],op; while(scanf("%s %d",st,&n)!=EOF){ for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ for(int z=0;z<n;z++){ cin>>op; if(op=='X') mp[i][j][z]=INF; if(op=='0') mp[i][j][z]=1; step[i][j][z]=INF; } } } cin>>sx>>sy>>sz>>ex>>ey>>ez; cin>>ed; tot=0; bfs(sz,sx,sy); if(step[ez][ex][ey]!=INF){ cout<<n<<" "<<tot<<endl; } else cout<<"NO ROUTE"<<endl; } return 0; }