hdu1253胜利大逃亡(bfs)

来源:互联网 发布:佛经诵读软件 编辑:程序博客网 时间:2024/06/07 04:44

题目大意:不会看不懂中文吧?

思路:出口已知,因为有个时间限制,当然时间越短越好,所以bfs,不过写得似乎很挫1800多ms,能过,将就着看哈!大笑

代码如下:

#include<stdio.h>#include<string.h>#include<algorithm>#include<queue>using namespace std;typedef struct{int x,y,z;int cnt;}mor;struct node{int x,y,z;}zit[6]={{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}};int map[50][50][50],book[50][50][50],a,b,c,t,flag;bool pan(int x,int y,int z){if(x>=0&&x<a&&y>=0&&y<b&&z>=0&&z<c)return true;return false;}void bfs(){queue<mor>que;mor star,now,next;star.x=star.y=star.z=star.cnt=0;while(!que.empty())que.pop();que.push(star);book[0][0][0]=1;int i,j,n;while(!que.empty()){now=que.front();que.pop();if(now.cnt>=t)return ;for(i=0;i<6;i++){next.x=now.x+zit[i].x;next.y=now.y+zit[i].y;next.z=now.z+zit[i].z;if(pan(next.x,next.y,next.z) && !map[next.x][next.y][next.z] && !book[next.x][next.y][next.z]){book[next.x][next.y][next.z]=1;if(next.x==a-1&&next.y==b-1&&next.z==c-1){flag=0;printf("%d\n",now.cnt+1);return ;}next.cnt=now.cnt+1;que.push(next);}}}return ;}int main(){int i,j,k,ps;scanf("%d",&ps);while(ps--){scanf("%d%d%d%d",&a,&b,&c,&t);memset(book,0,sizeof(book));for(i=0;i<a;i++)for(j=0;j<b;j++)for(k=0;k<c;k++)scanf("%d",&map[i][j][k]);flag=1;bfs();if(flag)printf("-1\n");}return 0;}


原创粉丝点击