链接:点击打开链接
和 hdu 1253 胜利大逃亡基本一样,三维bfs,只是输入不同,这里给的起点,终点坐标是z y x,而不是x y z;这里注意一下就可以啦,我就是这里没注意,改错浪费很长时间。。
#include<iostream> #include<stdio.h> #include<queue> #include<string.h> using namespace std; char a[11][11][11]; int b[11][11][11],A,B,C,A1,B1,C1,n; int c[6][3]={{0,0,1},{0,0,-1},{1,0,0},{0,1,0},{-1,0,0},{0,-1,0}}; struct ss{ int x,y,z,flag; }; void bfs(){ int i,j,k; queue<ss>Q; memset(b,0,sizeof(b)); ss p,s; p.x=C1,p.y=B1,p.z=A1,p.flag=0; b[C1][B1][A1]=1; Q.push(p); while(!Q.empty()){ p=Q.front(); Q.pop(); if(p.x==C&&p.y==B&&p.z==A){ printf("%d %d\n",n,p.flag); return; } for(i=0;i<6;i++){ s=p; s.x+=c[i][0],s.y+=c[i][1],s.z+=c[i][2],s.flag+=1; if(s.x>=0&&s.x<n&&s.y>=0&&s.y<n&&s.z>=0&&s.z<n&&a[s.x][s.y][s.z]=='O'&&!b[s.x][s.y][s.z]){ b[s.x][s.y][s.z]=1; Q.push(s); } } } printf("NO ROUTE\n"); } int main(){ int i,j,k; char str[15]; while(cin>>str>>n){ for(i=0;i<n;i++) for(j=0;j<n;j++) for(k=0;k<n;k++) cin>>a[i][j][k]; //for(i=0;i<n;i++) //for(j=0;j<n;j++) //for(k=0;k<n;k++) //printf("%c",a[i][j][k]); scanf("%d %d %d",&A1,&B1,&C1); scanf("%d %d %d",&A,&B,&C); cin>>str; bfs(); } return 0; }