省赛训练F 广搜
来源:互联网 发布:php打印数组的值 编辑:程序博客网 时间:2024/04/30 06:29
问题的模型是:在允许消耗一定量生命换取时间的前提下,从起始点到终点所需的最短时间。
利用广度优先搜索,数组ti[i][j][k]:表示失去k点血量时,到达(i,j)的最快时间。
由于开始有100点血,血量小于等于0时死亡,实际可用血量是99。
使用优先队列,队列节点有三个属性:x,y,k,(x,y)为该节点表示的位置,k为失去的血量数.
利用广度优先搜索,数组ti[i][j][k]:表示失去k点血量时,到达(i,j)的最快时间。
由于开始有100点血,血量小于等于0时死亡,实际可用血量是99。
使用优先队列,队列节点有三个属性:x,y,k,(x,y)为该节点表示的位置,k为失去的血量数.
#include <iostream>#include <cstdio>#include <queue>#include <math.h>using namespace std;#define MAXN 99999999int n,m,sx,sy,ex,ey,t;int mapp[110][110];int ti[110][110][110];int dir[4][2]={{0,1},{-1,0},{0,-1},{1,0}};struct Node{ int x,y,hp; Node(){} Node(int _x,int _y,int _hp):x(_x),y(_y),hp(_hp) {}};queue<Node>Q;bool inMap( int x,int y ) {return x>=0 && x < n && y>=0 && y < m;}void input(){ scanf("%d%d%d%d%d%d%d",&n,&m,&sx,&sy,&ex,&ey,&t); for(int i=0;i<n;i++) for(int j=0;j<m;j++) { scanf("%d",&mapp[i][j]); }}void init(){ for(int i=0;i<n;i++) for(int j=0;j<m;j++) for(int k=0;k<100;k++) { ti[i][j][k]=MAXN; } while(!Q.empty()) Q.pop();}void bfs(){ Q.push(Node(sx,sy,0)); ti[sx][sy][0]=0; Node now,next; int tt; while(!Q.empty()) { now=Q.front();Q.pop(); for(int i=0;i<4;i++) { next.x=now.x+dir[i][0]; next.y=now.y+dir[i][1]; int tnow=ti[now.x][now.y][now.hp]; if(!inMap(next.x,next.y)) continue; next.hp=now.hp; int& tnext=ti[next.x][next.y][next.hp]; tt=tnow+ abs(mapp[next.x][next.y]-mapp[now.x][now.y]) +1; if(tt<=t&&tt<tnext) { tnext=tt; Q.push(next); } if(mapp[next.x][next.y]>mapp[now.x][now.y]) continue; next.hp=now.hp+mapp[now.x][now.y]-mapp[next.x][next.y]; if(next.hp>=100) continue; int& tnext2=ti[next.x][next.y][next.hp]; tt=tnow+1; if(tt<=t&&tt<tnext2) { tnext2=tt; Q.push(next); } } }}int main(){ int T,i,j,k; scanf("%d",&T); while(T--) { input(); init(); bfs(); int ans=MAXN; for(i=0;i<100;i++) if(ans>ti[ex][ey][i]) ans=ti[ex][ey][i]; if ( ans > t ) {puts("Terrorists win!");} else {puts("Run, Forrest, run!");printf("%d\n" , ans);} } return 0;}
- 省赛训练F 广搜
- F广搜
- POJ 1111----F - 广搜 基础
- ZCMU新人训练赛F
- BFS广搜题目【经典训练题】
- 蓝桥杯训练:广搜——跳马
- BFS(广搜训练题目)
- 2015广工新生赛 Problem F: 有钱的wingkou
- 【NYIST】暑假训练赛 (一)----Problem F
- 蓝桥杯训练:广搜——电梯遇女神
- ZZULI OJ Contest - 东北省赛训练赛 Problem F: 蛤玮买好了礼物 【GCD】
- hpu暑假训练F
- 2015广工网络赛决赛-Problem F: 强迫症患者(模拟题)
- 2013 - ECJTU 暑期训练赛第三场-problem-F
- 2013 - ECJTU 暑期训练赛第四场-problem-F
- 2013 - ECJTU 暑期训练赛第五场-problem-F
- 2013 - ECJTU 暑期训练赛第六场-problem-F
- 2013 - ECJTU 暑期训练赛第七场-problem-F
- 同一类,不同对象可相互访问各自的私有项
- LR通用的性能分析流程
- (转)linux iptables 命令
- zoj 1619 Present(错排公式的简单应用)
- [PKU] 2157 没做完的题目
- 省赛训练F 广搜
- 即插即用型设备驱动的加载过程
- 使用PLSQL将TXT或CSV数据导入ORACLE
- Mplayer向arm板移植出现播放位置固定在右上角的简单解决办法
- android camer 图片回显界面照片分享到微博、人人、彩信、蓝牙的功能实现
- SQl 语句(常见) 新建,删除,修改表结构
- Vmware vFabric Suite开始支持自动化部署与PostgreSQL
- zencart 在商品详细页添加新字段!!
- <%=%> 引发的aspx文件、.aspx.cs文件和.aspx.designer.cs的一些说明