题目连接:点击打开链接
搜索以前没怎么学习,这次学长在讲就跟着学习了。基础的Bfs。很简单,主要学习的是实现的方法。
代码:
#include<cstdio> #include<cstring> #include<queue> using namespace std; const int N=53; int map[N][N][N]; int a,b,c,t; int dx[7]={0,0,0,0,1,-1}; int dy[7]={0,0,1,-1,0,0}; int dz[7]={1,-1,0,0,0,0}; struct Position { int x,y,z; int step; Position(){} Position(int x1,int y1,int z1,int s1):x(x1),y(y1),z(z1),step(s1) {} }; void bfs() { Position node(0,0,0,0); map[0][0][0]=1; queue<Position> q; q.push(node); while(!q.empty()) { Position temp,x1; temp=q.front(); q.pop(); if(temp.x==a-1&&temp.y==b-1&&temp.z==c-1) { if(temp.step<=t) printf("%d\n",temp.step); else printf("-1\n"); return ; } for(int i=0;i<6;i++) { x1.x=temp.x+dx[i];x1.y=temp.y+dy[i];x1.z=temp.z+dz[i]; if(x1.x>=0&&x1.x<a&&x1.y>=0&&x1.y<b&&x1.z>=0&&x1.z<c&&map[x1.x][x1.y][x1.z]==0) { x1.step=temp.step+1; q.push(x1); map[x1.x][x1.y][x1.z]=1; } } }printf("-1\n"); } int main() { int T; scanf("%d",&T); while(T--) { scanf("%d%d%d%d",&a,&b,&c,&t); for(int i=0;i<a;i++) for(int j=0;j<b;j++) for(int k=0;k<c;k++) scanf("%d",&map[i][j][k]); bfs(); } return 0; }