Hdu1240 - Asteroids! - 广度优先搜索

来源:互联网 发布:加拿大gpa算法美国 编辑:程序博客网 时间:2024/06/05 14:59
#include<stdio.h>#include<string.h>int n;char a[10];char map[105][105][105];int mark[105][105][105];int to[6][3]={{1,0,0},{0,1,0},{0,0,1},{-1,0,0},{0,-1,0},{0,0,-1}};struct {int x,y,z,id;}queue[1000005],s,e,now,next;int bfs(){memset(mark,0,sizeof(mark));int fr,ed,i;fr=ed=0;s.id=0;queue[ed++]=s;mark[s.x][s.y][s.z]=1;while(fr<ed){now=queue[fr++];if(now.x==e.x&&now.y==e.y&&now.z==e.z){return now.id;}for(i=0;i<6;i++){next.x=now.x+to[i][0];next.y=now.y+to[i][1];next.z=now.z+to[i][2];if(next.x<0||next.y<0||next.z<0||next.x>=n||next.y>=n||next.z>=n||mark[next.x][next.y][next.z]==1||map[next.x][next.y][next.z]=='X'){continue;}mark[next.x][next.y][next.z]=1;next.id=now.id+1;queue[ed++]=next;}}return -1;}int main(){while(scanf("%s%d",a,&n)!=EOF){for(int i=0;i<n;i++){for(int j=0;j<n;j++){scanf("%s",map[i][j]);}}scanf("%d%d%d",&s.z,&s.y,&s.x);scanf("%d%d%d",&e.z,&e.y,&e.x);scanf("%s",a);int t=bfs();if(t==-1){puts("NO ROUTE");}else {printf("%d %d\n",n,t);}}}

0 0