结训赛没写出来原来就是因为少写了一种移动的情况,QAQ
题目链接:https://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Contest/contestproblem/cid/2763/pid/3929
#include<iostream>
#include<queue>
#include<string.h>
using namespace std;
struct node
{
int x;
int y;
int z;
int l;
int step;
}now,tmp;
int x,y,z,w;
int vis[31][31][31][31];
char a[31][31][31][31];
int d[10][4]={{1,0,0,0},{0,1,0,0},{-1,0,0,0},{0,-1,0,0},{0,0,1,0},{0,0,-1,0},{0,0,0,1},{0,0,0,-1}};
int ei,ej,ek,el;
int si,sj,sk,sl;
void spfa(node s)
{
memset(vis,0,sizeof(vis));
queue<node>q;
vis[s.x][s.y][s.z][s.l]=1;
s.step=0;
q.push(s);
while(!q.empty())
{
node k=q.front();
q.pop();
vis[k.x][k.y][k.z][k.l]=1;
if(k.x==ei&&k.y==ej&&k.z==ek&&k.l==el)
{
cout<<k.step<<endl;
return ;
}
for(int i=0;i<8;i++)
{
tmp.x=k.x+d[i][0];
tmp.y=k.y+d[i][1];
tmp.z=k.z+d[i][2];
tmp.l=k.l+d[i][3];
if(tmp.x<0||tmp.y<0||tmp.z<0||tmp.l<0||tmp.x>=x||tmp.y>=y||tmp.z>=z||tmp.l>=w)
{
continue;
}
if(a[tmp.x][tmp.y][tmp.z][tmp.l]=='#')
{
continue;
}
if(!vis[tmp.x][tmp.y][tmp.z][tmp.l]&&a[tmp.x][tmp.y][tmp.z][tmp.l]!='#')
{
vis[tmp.x][tmp.y][tmp.z][tmp.l]=1;
tmp.step=k.step+1;
q.push(tmp);
}
}
}
cout<<"WTF"<<endl;
return ;
}
int main()
{
while(cin>>x>>y>>z>>w)
{
for(int i=0;i<x;i++)
{
for(int j=0;j<y;j++)
{
for(int k=0;k<z;k++)
{
for(int l=0;l<w;l++)
{
cin>>a[i][j][k][l];
if(a[i][j][k][l]=='E')
{
ei=i;
ej=j;
ek=k;
el=l;
}
if(a[i][j][k][l]=='S')
{
si=i;
sj=j;
sk=k;
sl=l;
}
}
}
}
}
node s;
s.x=si;
s.y=sj;
s.z=sk;
s.l=sl;
spfa(s);
}
return 0;
}