hdu 1072 Nightmare bfs 重置定时炸弹
来源:互联网 发布:网络语言bug什么意思 编辑:程序博客网 时间:2024/05/22 16:54
题意:
一个人被绑上定时炸弹后关入n*m迷宫,炸弹倒计时时6s,人只能走上下左右四个方向,每次耗时1秒,走出迷宫可抛掉炸弹获救。迷宫存在5种元素:
0,表示墙,不能通行
1,表示路,可以通行
2,表示起点
3,表示出口
4,表示定时炸弹重置器,即炸弹计时变回6s,重置耗时不计。
注意:在到达出口或者重置位置时,如果倒计时为0,则回被炸死,即每次重置只有5s移动时间。
球逃出迷宫的最短时间,若逃不出去则输出-1。
题解:
典型的bfs题目,用key更新状态(key+1),每次碰到重置器后更新,即变为从重启器地点开始新一轮的bfs。将到达的重启器地点设置为墙(因为不可能回去,如果回去了就说明不能逃出去,那么回到重置器位置也就没有意义)。
代码:
#include <iostream>#include <queue>#include <cstdio>#include <cstring>#include <algorithm>#include <ctime>#include <vector>#include <cmath>#include <cstdlib>using namespace std;struct node{ int x,y,num,t; int key;};int vis[64][10][10];int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};int e[10][10];void bfs(int x1,int y1,int x2,int y2,int n,int m){ int i,j,k; memset(vis,0,sizeof(vis)); vis[0][x1][y1]=1; node f,g; f.x=x1,f.y=y1,f.num=0,f.key=0,f.t=0; queue<node>q; q.push(f); while(!q.empty()) { f=q.front(); q.pop(); for(i=0;i<4;i++) { g.x=f.x+dir[i][0]; g.y=f.y+dir[i][1]; if(g.x<0||g.y<0||g.x>=n||g.y>=m||e[g.x][g.y]==0||vis[f.key][g.x][g.y])continue; g.num=f.num+1; g.t=f.t+1; //if(g.x==3&&g.y==3)printf("%d\n",g.t); if(g.x==x2&&g.y==y2){printf("%d\n",g.num);return ;} if(e[g.x][g.y]==4) { g.t=0; g.key=f.key+1; e[g.x][g.y]=0; vis[g.key][g.x][g.y]=1; } else { if(g.t==5)continue; g.key=f.key; vis[g.key][g.x][g.y]=1; } q.push(g); } } printf("-1\n");}int main(){ int T; scanf("%d",&T); while(T--) { int n,m,i,j,k,x1,y1,x2,y2; scanf("%d%d",&n,&m); for(i=0;i<n;i++) { for(j=0;j<m;j++) { scanf("%d",&e[i][j]); if(e[i][j]==2)x1=i,y1=j; if(e[i][j]==3)x2=i,y2=j; } } bfs(x1,y1,x2,y2,n,m); } return 0;}
0 0
- hdu 1072 Nightmare bfs 重置定时炸弹
- HDU 1072 Nightmare (时间重置)BFS
- HDU 1072 Nightmare( 身上带有定时炸弹的他能否在炸弹爆炸之前离开—— BFS+DP思想)
- BFS hdu 1072 Nightmare
- HDU 1072 Nightmare BFS
- hdu 1072 Nightmare BFS
- hdu 1072 Nightmare bfs
- Hdu 1072 Nightmare[Bfs]
- hdu 1072 Nightmare--bfs
- HDU 1072 Nightmare(BFS)
- HDU 1072 Nightmare (BFS)
- HDU 1072 Nightmare (BFS)
- bfs-hdu-1072-Nightmare
- HDU 1072 Nightmare【BFS】
- HDU 1072 Nightmare BFS
- HDU 1072 Nightmare BFS
- hdu 1072 Nightmare (bfs)
- hdu 1072 Nightmare (BFS)
- Python--执行系统命令
- 剑指offer-15:链表中倒数第k个结点
- hdoj.2028 Lowest Common Multiple Plus 20140728
- 答读者问(10):有关对博客的评价及个人技术发展路线等问题
- [ACM] POJ 2947 Widget Factory (高斯消元)
- hdu 1072 Nightmare bfs 重置定时炸弹
- hdu 4893 Wow! Such Sequence! 线段树
- hdoj.2029 Palindromes _easy version 20140728
- IOS真机测试及程序打包和上传到APP
- deque
- iOS Crash闪退日志获取和上传至服务器(NSSetUncaughtExceptionHandler)
- 谈下自己的一些编程经验
- hdu1020
- LOL的庆祝