现在的位置: 首页 > 综合 > 正文

Nyoj 523&&Hud 1253 亡命逃窜[Bfs]

2017年05月29日 ⁄ 综合 ⁄ 共 988字 ⁄ 字号 评论关闭

题目连接:点击打开链接

搜索以前没怎么学习,这次学长在讲就跟着学习了。基础的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;
}

抱歉!评论已关闭.