地址:https://ac.nowcoder.com/acm/contest/5338/A
解析:直接套bfs找最短路的板子就可以了,只是这里是三维,注意一下细节就行了。刚开始不知道三维怎么读入......
#include<iostream> #include<cstdio> #include<cstring> #include<queue> using namespace std; const int maxn=105; char mp[maxn][maxn][maxn]; int dis[maxn][maxn][maxn]; int dx[]={0,0,1,-1,0,0}; int dy[]={0,0,0,0,-1,1}; int dz[]={1,-1,0,0,0,0}; int n; struct node { int x,y,z; }st[maxn]; int bfs() { queue<node>q; memset(dis,-1,sizeof(dis)); q.push({1,1,1}); dis[1][1][1]=1; while(!q.empty()) { node s=q.front(); q.pop(); for(int i=0;i<6;i++) { int x=s.x+dx[i]; int y=s.y+dy[i]; int z=s.z+dz[i]; if(x>=1&&y>=1&&z>=1&&x<=n&&y<=n&&z<=n&&dis[x][y][z]==-1&&mp[x][y][z]!='*') { q.push({x,y,z}); dis[x][y][z]=dis[s.x][s.y][s.z]+1; } } } return dis[n][n][n]; } int main() { // int n ; cin>>n; for(int k = 1; k<=n;k++) { for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>mp[i][j][k]; } cout<<bfs()<<endl; }