题解
2024-11-25 18:24:22
发布于:广东
11阅读
0回复
0点赞
这题可以用广度优先搜索(BFS)来解,可以直接套模板
#include<bits/stdc++.h>
using namespace std;
int a,b,c,t;
bool m[50][50][50],vis[50][50][50];
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};
struct node
{
int x,y,z,step;
};
int bfs()
{
queue<node> q;
vis[0][0][0]=1;
q.push({0,0,0,0});
while (!q.empty())
{
node now=q.front();
q.pop();
if (now.x==a-1 && now.y==b-1 && now.z==c-1)
return now.step;
for (int i=0;i<6;i++)
{
node nw={now.x+dx[i],now.y+dy[i],now.z+dz[i],now.step+1};
if (nw.x>=0 && nw.y>=0 && nw.z>=0 && nw.x<a && nw.y<b && nw.z<c && !vis[nw.x][nw.y][nw.z] && !m[nw.x][nw.y][nw.z])
{
vis[nw.x][nw.y][nw.z]=1;
q.push(nw);
}
}
}
return -1;
}
int main()
{
int k;
cin >> k;
while (k--)
{
cin >> a >> b >> c >> t;
for (int i=0;i<a;i++)
{
for (int j=0;j<b;j++)
{
for (int l=0;l<c;l++)
cin >> m[i][j][l];
}
}
memset(vis,0,sizeof(vis));
int f=bfs();
if (f>t)
cout << "-1\n";
else
cout << f << endl;
}
return 0;
}
这里空空如也
有帮助,赞一个