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

来源:互联网 发布:anaconda安装教程linux 编辑:程序博客网 时间:2024/05/17 06:21

题目连接:点击打开链接

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


原创粉丝点击