Jelly

Jelly

在遍历一张地图,求最短路径的时候,最简便的方法就是用bfs来写

代码:

// Created by CAD on 2020/1/18.
#include <bits/stdc++.h>
#define mst(name, value) memset(name,value,sizeof(name))
using namespace std;

char a[105][105][105];
int dx[7]={0,1,0,0,-1,0,0};
int dy[7]={0,0,1,0,0,-1,0};
int dz[7]={0,0,0,1,0,0,-1};
int dp[105][105][105];
int vis[105][105][105];
struct node{
    int x,y,z,d;
};
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n;
    cin>>n;
    for(int i=1;i<=n;++i)
        for(int j=1;j<=n;++j)
            for(int k=1;k<=n;++k)
                cin>>a[i][j][k];
    mst(dp,-1);
    queue<node> q;
    q.push({1,1,1,1});
    vis[1][1][1]=dp[1][1][1]=1;
    while(!q.empty())
    {
        node now=q.front(); q.pop();
        for(int i=1;i<=6;++i)
        {
            int x=now.x+dx[i],y=now.y+dy[i],z=now.z+dz[i];
            if(x<1||x>n||y<1||y>n||z<1||z>n||a[x][y][z]=='*'||vis[x][y][z]) continue;
            vis[x][y][z]=1;
            dp[x][y][z]=1+now.d;
            q.push({x,y,z,1+now.d});
        }
    }
    cout<<dp[n][n][n]<<endl;
    return 0;
}
posted @ 2020-01-19 10:14  caoanda  阅读(303)  评论(0编辑  收藏  举报