HDOJ1072 Nightmare(BFS,剪枝)
来源:互联网 发布:淘宝自刷平台 编辑:程序博客网 时间:2024/06/06 00:26
HDOJ1072
这道题可以剪枝:
剪枝说明:如果当前到达该点时间少于该点剩余时间并且步数大于该点步数,则返回.
剪枝说明:http://blog.csdn.net/iaccepted/article/details/23198623
#include <iostream>#include<cstdio>#include<algorithm>#include<queue>const int N=10;using namespace std;int map[N][N],n,m;int dir[][2]={{0,1},{0,-1}, {1,0},{-1,0}};struct node{ int x,y; //记录坐标 int step,time; //记录步数和时间}start;void BFS(){ queue<node> q;//队列实现 node q1,q2; q.push (start); while(!q.empty ()){ int i; q1=q.front (); q.pop (); for(i=0;i<4;i++){ q2.x=q1.x+dir[i][0]; q2.y=q1.y +dir[i][1]; q2.step =q1.step+1; q2.time =q1.time -1; //判断这一步是否超过矩阵的范围 //判断这不不是走过的(或墙)或炸弹的时间已到 if(q2.x>=0&&q2.y>=0&&q2.x<n&&q2.y<m&&map[q2.x][q2.y]!=0&&q2.time >0){ //说明找到答案,搜索结束 if(map[q2.x][q2.y]==3){ cout<<q2.step<<endl ; return ; } else if(map[q2.x][q2.y]==4){ q2.time =6; //碰到时间调整器,可以恢复时间 map[q2.x][q2.y]=0;//标记已经走过 } q.push (q2); //将这一步放进队列 } } } //队列搜完都没找到答案,说明答案不存在 cout<<"-1"<<endl; return ;}int main(){ int i,j,T; scanf("%d",&T); while(T--){ cin>>n>>m; for(i=0;i<n;i++) for(j=0;j<m;j++){ cin>>map[i][j]; if(map[i][j]==2){ start.x=i; start.y=j; start.step =0; start.time =6; //时间初始化为6 } } BFS(); } return 0;}
阅读全文
0 0
- HDOJ1072 Nightmare(BFS,剪枝)
- HDOJ1072 Nightmare(记忆化DFS/BFS)
- Nightmare(暴力剪枝BFS)
- hdoj1072 Nightmare(bfs寻找最短时间)
- hdoj1072 Nightmare
- hdoj1072,Nightmare
- HDU 1072Nightmare(BFS+剪枝)
- hdu Nightmare(BFS||DFS)(不标记的剪枝)
- HDU 1072 Nightmare(DFS或BFS+剪枝)
- hdu1072 Nightmare(BFS)
- hdu1072 Nightmare(bfs)
- HDU1072 Nightmare(BFS)
- HDU1072(BFS)Nightmare
- HDU 1072 Nightmare(BFS)(注:不标记每个节点四方向累计4次剪枝)
- hdu 1072 Nightmare (bfs)
- hdu 1072 Nightmare (BFS)
- hdu 1072 Nightmare bfs()
- hdu 1072Nightmare(bfs)
- Unused import statement
- XML DTD
- 【Stanford CNN课程笔记】5. 神经网络解读1 几种常见的激活函数
- Django创建应用、模型、配置后台自动管理
- 628. Maximum Product of Three Numbers
- HDOJ1072 Nightmare(BFS,剪枝)
- javapoet-让你不再书写无聊的代码(一)
- Windows下用命令打开数据库
- 认真学习php面向对象-6
- 路漫漫其修远兮
- Qt4及Qt5的下载、安装和使用
- JavaScript中DOM中节点获取
- java8与并行
- bzoj1008 [HNOI2008]越狱(组合数学+快速幂)