Asteroids!

#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
int n,a,b,c,d,m,g,temp;
char ch[10];
char ds[12][12][12];
int dis[6][3]={{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}};
struct node
{
    int x,y,z,v;
};
int  bfs(int q,int w,int e)
{
    queue<node>p;
    node f;
    f.x=q;
    f.y=w;
    f.z=e;
    f.v=0;
    ds[q][w][e]='X';
    p.push(f);
    while(!p.empty())
    {
        f=p.front();
        p.pop();
        if(f.x==g&&f.y==m&&f.z==d)
            return f.v;
        for(int i=0;i<6;i++)
        {
            node l;
            l.x=f.x+dis[i][0];
            l.y=f.y+dis[i][1];
            l.z=f.z+dis[i][2];
            if(l.x>=0&&l.y>=0&&l.z>=0&&l.x<n&&l.y<n&&l.z<n&&ds[l.x][l.y][l.z]!='X')
            {
            l.v=f.v+1;
            ds[l.x][l.y][l.z]='X';
            p.push(l);
            }
        }
    }
    return -1;
}
int main()
{


    while(~scanf("%s%d",ch,&n))
    {
        getchar();
        for(int i=0;i<n;i++)//输入地图时先输入的片(z),再输入的行(x),再输入的列(y)
        {
            for(int j=0;j<n;j++)
            {
                    scanf("%s",ds[i][j]);
                    getchar();
            }
        }
         scanf("%d%d%d",&a,&b,&c);//输入坐标时先输入的列(y),再输入的行(x),再输入的片(z)
         scanf("%d%d%d",&d,&m,&g);
         scanf("%s",ch);
         temp=bfs(c,b,a);//所以进行bfs时应该对应好关系,先输入片,再是行,最后是列
        if(temp==-1)
            printf("NO ROUTE\n");
        else
            printf("%d %d\n",n,temp);


    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/zhangjinlei321/article/details/80917952
今日推荐