hdu1240 Asteroids! 在处理NO ROUTE有点麻烦,因为sum可以等于0,故用队列,C语言要用结构数组编写队列

#include<stdio.h>
#include<string.h>
#define Maxn 15
char map[Maxn][Maxn][Maxn];
int N,A,B,C,D,E,F;
char start[Maxn];
char end[Maxn];
int move[6][3]={{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}};
typedef struct{
	int x,y,z,n;
}node;
node q,p;
node que[1088];
int main()
{   
	while(scanf("%s%d",start,&N)!=EOF)   
	{      
		int i,j;      
		for(i=0;i<N;i++)      
		{         
			for(j=0;j<N;j++)         
			{            
				scanf("%s",map[i][j]);         
			}      
		}
		scanf("%d%d%d%d%d%d",&A,&B,&C,&D,&E,&F);
		scanf("%s",end);
		q.x=A,q.y=B,q.z=C,q.n=0;
		map[A][B][C]='X';
		int head=1;
		int rear=1;
		int ok=0;
		que[rear++]=q;
		while(head<rear)
		{
			q=que[head];
			head++;
			if(q.x==D&&q.y==E&&q.z==F)
			{
				printf("%d %d\n",N,q.n);
				ok=1;
				break;
			}
			int tx,ty,tz;
			for(i=0;i<6;i++)
			{
				tx=q.x+move[i][0];
				ty=q.y+move[i][1];
				tz=q.z+move[i][2];
				if(tx>=0&&tx<N&&ty>=0&&ty<N&&tz>=0&&tz<N)
				{
					if(map[tz][tx][ty]=='O')
					{
						map[tz][tx][ty]='X';
						p.x=tx,p.y=ty,p.z=tz,p.n=q.n+1; 
						que[rear].x=tx,que[rear].y=ty,que[rear].z=tz,que[rear].n=q.n+1,rear++;
					}
	            }
	         }
		}
		if(!ok)
		{
			printf("NO ROUTE\n");
		}
	}
	return 0;
}

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值