hdu1240 Asteroids!

来源:互联网 发布:半正定矩阵怎么理解 编辑:程序博客网 时间:2024/05/20 01:08

http://acm.hdu.edu.cn/showproblem.php?pid=1240

#include<iostream>#include<stdio.h>#include<string.h>#include<queue>using namespace std;int sx,sy,sz,sum,n,ans,ex,ey,ez;int a[6][3]={{0,0,1},{0,0,-1},{0,1,0},{0,-1,0},{1,0,0},{-1,0,0}};char st[11][11][11];int v[11][11][11];struct node{int x,y,z,step;};int  bfs(int x,int y,int z){int i;queue<node>q;node cur,next;cur.x=x;cur.y=y;cur.z=z;cur.step=0;//注意这里对于步数的初始化q.push(cur);while(!q.empty()){cur=q.front();q.pop();if(cur.x==ex&&cur.y==ey&&cur.z==ez)return cur.step;//for(i=0;i<6;i++){next=cur;//这里一定要注意,否则输出的结果就不对了next.x=cur.x+a[i][0];next.y=cur.y+a[i][1];next.z=cur.z+a[i][2];if(next.x>=0&&next.x<n&&next.y>=0&&next.y<n&&next.z>=0&&next.z<n&&v[next.x][next.y][next.z]==0&&st[next.x][next.y][next.z]=='O'){v[next.x][next.y][next.z]=1;next.step++;q.push(next);}}}return -1;}int main(){int i,j,z;char s[7],e[7];while(scanf("%s",s)!=EOF){scanf("%d",&n);getchar();memset(v,0,sizeof(v));for(z=0;z<n;z++){for(i=0;i<n;i++){for(j=0;j<n;j++)scanf("%c",&st[i][j][z]);getchar();}}scanf("%d%d%d%d%d%d",&sx,&sy,&sz,&ex,&ey,&ez);//printf("%d %d %d\n",sx,sy,sz);scanf("%s",e);sum=ans=0;v[sx][sy][sz]=1;ans=bfs(sx,sy,sz);if(ans>=0)printf("%d %d\n",n,ans);elseprintf("NO ROUTE\n");}}


0 0