社区讨论
站外题求调(悬关)
学术版参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @lo3b4bnc
- 此快照首次捕获于
- 2023/10/24 03:44 2 年前
- 此快照最后确认于
- 2023/10/24 03:44 2 年前
CPP
题目描述
你被困在一个3D地牢中,需要找到最快的出路!地牢是由单位立方体组成的,可能有或不可能充满岩石。把一个单位向北、南、东、西、上或下移动一分钟。你不能斜向移动,迷宫四周都是坚硬的岩石。
逃生是可能的吗?如果是的话,要花多长时间?
输入格式
地牢描述从一个包含三个整数L,R和C(所有限制为30的大小)开始。
L是构成地牢的层级数。
R和C是构成每个层次的计划的行和列的数目。
然后将遵循R块的每行包含C字符。每个角色都描述了地牢中的一个格子。一个充满岩石的格子是由一个'y'表示的,空的格子由一个'.'表示。你的起始位置用“S”表示,而字母“E”的出口表示。每个级别后有一条空行。
输出格式
迷宫产生一行输出。如果有可能到达出口,输出最小的x,表示在x分钟(S)中逃逸。
如果无法逃脱,输出Trapped!
代码:
CPP#include<bits/stdc++.h>
using namespace std;
int dx[6]={1,-1,0,0,0,0},dy[6]={0,0,1,-1,0,0},dz[6]={0,0,0,0,1,-1},vis[31][31][31],r,c,l;
char g[31][31][31];
struct data{
int x,y,z,dis;
}st;
bool operator<(data a,data b)
{
return a.dis>b.dis;
}
void bfs()
{
priority_queue<data>q;
q.push({st.x,st.y,st.z,st.dis});
while(q.size())
{
data t=q.top();
q.pop();
for(int i=0;i<6;i++)
{
int x=t.x+dx[i],y=t.y+dy[i],z=t.z+dz[i];
if(x<0||x>=r)continue;
if(y<0||y>=c)continue;
if(z<0||z>=l)continue;
if(vis[x][y][z])continue;
if(g[x][y][z]=='#')continue;
if(g[x][y][z]=='E')
{
printf("%d",t.dis+1);
return;
}
vis[x][y][z]=1;
q.push({x,y,z,t.dis+1});
}
}
cout<<"Trapped!";
}
int main(){
scanf("%d%d%d",&l,&r,&c);
for(int i=0;i<l;i++)
{
for(int j=0;j<r;j++)
{
for(int k=0;k<c;k++)
{
cin>>g[j][k][i];
if(g[j][k][i]=='S')st.x=j,st.y=k,st.z=i,st.dis=0;
}
}
}
bfs();
}
50分WA求调
回复
共 1 条回复,欢迎继续交流。
正在加载回复...