HDU 1253
来源:互联网 发布:数据库设计第三范式 编辑:程序博客网 时间:2024/06/08 10:33
Problem Description
Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会.
魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示成A个B*C的矩阵,刚开始Ignatius被关在(0,0,0)的位置,离开城堡的门在(A-1,B-1,C-1)的位置,现在知道魔王将在T分钟后回到城堡,Ignatius每分钟能从一个坐标走到相邻的六个坐标中的其中一个.现在给你城堡的地图,请你计算出Ignatius能否在魔王回来前离开城堡(只要走到出口就算离开城堡,如果走到出口的时候魔王刚好回来也算逃亡成功),如果可以请输出需要多少分钟才能离开,如果不能则输出-1.
魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示成A个B*C的矩阵,刚开始Ignatius被关在(0,0,0)的位置,离开城堡的门在(A-1,B-1,C-1)的位置,现在知道魔王将在T分钟后回到城堡,Ignatius每分钟能从一个坐标走到相邻的六个坐标中的其中一个.现在给你城堡的地图,请你计算出Ignatius能否在魔王回来前离开城堡(只要走到出口就算离开城堡,如果走到出口的时候魔王刚好回来也算逃亡成功),如果可以请输出需要多少分钟才能离开,如果不能则输出-1.
这是一道很经典的走迷宫题
首先要求判断能否走出迷宫,然后要求以最短路走出迷宫,最后计算出走出迷宫的步数,无疑采用广度优先搜索。建立队列,
#include<stdio.h>#include<string.h>typedef struct queue{ short x, y, z; int t;} Q;Q q[250002] ;//队列bool m[51][51][51] ;//迷宫,因为只有0,1状态,所以用bool节省内存int d[6][3] = {{0,0,1},{0,0,-1},{0,1,0},{0,-1,0},{1,0,0},{-1,0,0}} ;//六个方向六种走法,int A,B,C,T ;int tail=1;int ok(int x ,int y ,int z)//判断该点是否出边界{ if(x>=0 && x < A && y >=0 && y < B && z >=0 && z< C) return 1 ; return 0 ;}void inq(int x ,int y ,int z ,int t) //入队,把x,y,z,t放入队中{ q[tail].x = x ; q[tail].y = y ; q[tail].z = z ; q[tail++].t = t ;}int bfs()//广搜函数{ int head=0,x, y, z,t; m[0][0][0] = 1; while(head < tail)//从头开始找路径,头在推后,这样找的全面,找分支,当head=tail时所有找完该结束了 { x = q[head].x ; y = q[head].y ; z = q[head].z ; t = q[head].t ;//给四个元素赋值 for(int i=0 ; i<6 ; i++)//按顺序进队,分别向六个方向走,这样是按照广搜顺序 { int x1=x+d[i][0], y1=y+d[i][1], z1=z+d[i][2] ;//x1,y1,z1为移动后的位置 if(ok(x1,y1,z1) && !m[x1][y1][z1])//判断移动后点没有出界且是空点 { inq(x1,y1,z1,t+1) ;//入队,把x,y,z,t放入队中 m[x1][y1][z1]= 1;//标记为已经访问 } if(q[tail-1].x == A-1 && q[tail-1].y == B-1 && q[tail-1].z == C-1 && q[tail-1].t <= T)//判断刚刚入队的元素是否为终点,如果是的话返回其用时 return q[tail-1].t; } head++;//起点后移 } return -1 ;//如果不存在可行解,按规定返回-1}int main(){ int c ; scanf("%d",&c) ; while(c--) { scanf("%d %d %d %d",&A,&B,&C,&T); for(int k=0; k<A; k++) for(int i=0; i<B; i++) for(int j=0; j<C; j++) scanf("%d", &m[k][i][j]) ;//初始化数据 printf("%d\n",bfs()) ;//打印用时 } return 0 ;}
1 0
- hdu 1253
- hdu-1253
- HDU 1253
- HDU 1253
- HDU 1253
- HDU 1253
- hdu 1253
- HDU - 1253
- hdu 1253
- hdu 1253
- HDU 1253
- HDU 1253
- hdu 1253 三维bfs
- HDU 1253(BFS)
- HDU[1253]--bfs
- hdu~1253(bfs)
- hdu 1253 bfs
- hdu 1253 bfs
- 共享内存
- 在类中使用类成员函数创建线程
- [莫队算法] WHU Problem 1605 - Distance on Tree
- 消息队列通讯
- Unable to get package info for [包路径]; is package not installed
- HDU 1253
- 由于没有详细了解Timestamp和Date之间的关系犯的错
- 自定义View,ViewGroup
- 多线程程序设计
- JVM系列2:垃圾收集器与内存分配策略
- TCP/IP卷一(第二章学习)
- 科技漫谈——无人机
- corethink功能模块探索开发(十六)后台搜索功能
- JVM系列3:虚拟机类加载机制