感觉挺对的 但是样例都没有过 大佬求求
查看原帖
感觉挺对的 但是样例都没有过 大佬求求
803133
CYF123469楼主2023/2/26 11:09
#include <iostream>
#include <queue>
#include <cstring>
#include <cstdio>
using namespace std ;
int l,r,c ;
int d,e,f ;
int i,j,k ;
const int N=35 ;
char map[N][N][N] ;
int visit[N][N][N] ;
int xx[]={0,0,1,-1,0,0} ;
int yy[]={-1,1,0,0,0,0} ;
int zz[]={0,0,0,0,1,-1} ;
struct node
{
	int x,y,z,step ;
};
int bfs(int d,int e,int f)
{
	queue<node> q ;
	q.push({d,e,f,0}) ;
	while(q.size())
	{
		node t ;
		t=q.front() ;
		q.pop() ;
		if(map[i][j][k]=='E') return t.step ; 
		else 
		{
			for(int i=0;i<6;i++)
			{
				int idx=t.x+xx[i] ;
				int idy=t.y+yy[i] ;
				int idz=t.z+zz[i] ;
				if(idx>=1&&idx<=l&&idy>=1&&idy<=r&&idz>=1&&idz<=c&&map[i][j][k]!='#'&&!visit[i][j][k]) 
				{
					if(map[i][j][k]=='E') return t.step+1 ;
					else 
					{
						visit[i][j][k]=1 ;
						q.push({idx,idy,idz,t.step+1}) ;
					}
				}
			}
		}
	}
	return -1 ;
}
int main()
{
	scanf("%d%d%d",&l,&r,&c) ;
	memset(visit,0,sizeof(visit)) ;
	memset(map,'0',sizeof(map)) ;
	for(int i=1;i<=l;i++)
	{
		for(int j=1;j<=r;j++)
		{
			for(int k=1;k<=c;k++)
			{
				cin>>map[i][j][k] ;
				if(map[i][j][k]=='S') 
				{
					d=i,e=j,f=k ;
				}
			}
		}
	}
	int cnt=bfs(d,e,f) ;
	if(cnt==-1) printf("Trapped!") ;
	else 
	{
		if(cnt==1) printf("Escaped in 1 minute.") ;
		else printf("Escaped in %d minute(s).",cnt) ;
	}
	return 0 ;
}
2023/2/26 11:09
加载中...