532UVa三维迷宫

#include<stdio.h>
#include<string.h>
int dl[6]={0,0,0,0,1,-1};
int dr[6]={-1,+1,0,0,0,0};
int dc[6]={0,0,-1,+1,0,0};
const int max = 35;
char dung[35][35][35];
int dist[35][35][35];
int visit[35][35][35];
int q[max*max*max];
int l,r,c;
void bfs(int i,int j,int k);
int main()
{
	//
	freopen("input.txt","r",stdin);
	while(scanf("%d%d%d",&l,&r,&c)==3)
	{
		if(!l&&!r&&!c) break;
		memset(visit,0,sizeof(visit));
		memset(dist,-1,sizeof(dist));
		int si,sj,sk;
		int ei,ej,ek;
		for(int i = 0; i < l;i++)
		{
			for(int j = 0; j < r; j++)
			{
				scanf("%s",dung[i][j]);
				char* p = strchr(dung[i][j],'S');
				char* q = strchr(dung[i][j],'E');
				if(p)
				{
					si = i;
					sj = j;
					sk = p-dung[i][j];
				}
				if(q)
				{
					ei = i;
					ej = j;
					ek = q-dung[i][j];
				}
			}
		}
		//
		bfs(si,sj,sk);
		int dis = dist[ei][ej][ek];
		if(dis!=-1)
			printf("Escaped in %d minute(s).\n",dis);
		else
			printf("Trapped!\n");
	}
}
void bfs(int i,int j,int k)
{
	int front = 0;
	int rear  = 0;
	int u = i*max*max+j*max+k;
	q[rear++]=u;
	dist[i][j][k] = 0;
	visit[i][j][k] = 1;
	
	while(front<rear)
	{
		u = q[front++];
		i = u/max/max;
		j = u/max%max;
		k = u%max;

		for(int d = 0; d < 6;d++)
		{
			int ni = i+dl[d];
			int nj = j+dr[d];
			int nk = k+dc[d];
			if(ni>=0&& ni<l&& nj>=0&& nj<r&& nk>=0&& nk<c\
				&& dung[ni][nj][nk]!='#' &&visit[ni][nj][nk]==0)
			{
				u = ni*max*max+nj*max+nk;
				q[rear++] = u;
				visit[ni][nj][nk] = 1;
				dist[ni][nj][nk] = dist[i][j][k]+1;
				if(dung[ni][nj][nk]=='E') return;
			}
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值