BFS,优先队列优化
题意:
'S' : 起点
'T' : 终点
'#' : 毒气室
'B' :氧气
'P':不消耗步数
每次经过毒气室需要一瓶氧气,氧气可以重复获得,但只能带五瓶氧气,问最少步数
solution:
HINT:多维状态判重,多一维携带氧气瓶数量
没带氧气瓶的时候不能走毒气室#
携带超过5个跳过氧气B
相似题目:UVA816 Abbott's Revenge这题多一维方向
1 #include<bits/stdc++.h> 2 #include<iostream> 3 #include<cstdio> 4 #include<algorithm> 5 #include<vector> 6 #include<queue> 7 #include<cstring> 8 #define fi first 9 #define se second 10 #define mp make_pair 11 #define pb push_back 12 #define pw(x) (1ll << (x)) 13 #define sz(x) ((int)(x).size()) 14 #define all(x) (x).begin(),(x).end() 15 #define rep(i,l,r) for(int i=(l);i<(r);++i) 16 #define per(i,l,r) for(int i=(r)-1;i>=(l);--i) 17 #define maxn 500005 18 #define eps 1e-9 19 #define PIE acos(-1) 20 #define dd(x) cout << #x << " = " << (x) << ", " 21 #define de(x) cout << #x << " = " << (x) << "\n" 22 #define endl "\n" 23 #define INF 0x3f3f3f3f 24 using namespace std; 25 typedef double db; 26 typedef long long LL; 27 typedef vector<int> vi; 28 typedef pair<int, int> pii; 29 //---------------------- 30 int n,m; 31 char pic[105][105]; 32 bool vis[105][105][6]; 33 const int dir[4][2]={{-1,0},{1,0},{0,1},{0,-1}}; 34 struct Node{ 35 int x; 36 int y; 37 int d=0; 38 int cnt=0; 39 bool operator<(const Node& a)const{ 40 return d>a.d; 41 } 42 }start,u,v; 43 int cnt; 44 bool check(Node v) 45 { 46 return v.x>=0&&v.x<n&&v.y>=0&&v.y<m; 47 } 48 int bfs(int x,int y)//把#当路障,找氧气瓶 49 { 50 memset(vis,0,sizeof(vis)); 51 priority_queue<Node>q; 52 vis[x][y][0]=1; 53 start.x=x;start.y=y;start.d=0;start.cnt=0; 54 q.push(start); 55 while(!q.empty()) 56 { 57 u=q.top();q.pop(); 58 if(pic[u.x][u.y]=='T'){return u.d;} 59 rep(i,0,4){ 60 v=u; 61 v.x+=dir[i][0]; 62 v.y+=dir[i][1]; 63 if(!check(v))continue; 64 if(pic[v.x][v.y]=='#'){ 65 if(v.cnt>=1)v.cnt--,v.d++; 66 else continue; 67 } 68 else if(pic[v.x][v.y]=='B'){ 69 if(v.cnt>=5)continue; 70 else v.cnt++; 71 } 72 else if(pic[v.x][v.y]=='P')v.d--; 73 v.d++; 74 if(vis[v.x][v.y][v.cnt])continue; 75 vis[v.x][v.y][v.cnt]=1; 76 // dd(v.x+1);dd(v.y+1);dd(pic[v.x][v.y]);dd(v.cnt);de(v.d); 77 q.push(v); 78 } 79 } 80 return INF; 81 } 82 int main() 83 { 84 // ifstream cin("in.txt"); 85 while(cin>>n>>m,n+m){ 86 int ans=INF; 87 int ok=0; 88 rep(i,0,n)rep(j,0,m){ 89 cin>>pic[i][j]; 90 } 91 rep(i,0,n)rep(j,0,m)if(pic[i][j]=='S') 92 { 93 ans=bfs(i,j); 94 goto here; 95 } 96 here:; 97 if(ans!=INF)printf("%d\n",ans); 98 else puts("-1"); 99 } 100 return 0; 101 }
View Code
转载于:https://www.cnblogs.com/klaycf/p/9692333.html
BFS,优先队列优化相关推荐
- 杭电1254java实现(双bfs 优先队列)
推箱子 推箱子是一个很经典的游戏.今天我们来玩一个简单版本.在一个M*N的房间里有一个箱子和一个搬运工,搬运工的工作就是把箱子推到指定的位置,注意,搬运工只能推箱子而不能拉箱子,因此如果箱子被推到一个 ...
- P2048 [NOI2010] 超级钢琴(ST表 + 优先队列优化)
P2048 [NOI2010] 超级钢琴 题目 小 Z 是一个小有名气的钢琴家,最近 C 博士送给了小 Z 一架超级钢琴,小 Z 希望能够用这架钢琴创作出世界上最美妙的音乐. 这架超级钢琴可以弹奏出 ...
- dijkstra 的优先队列优化
既然要学习算法,就要学习到它的精髓,才能够使用起来得心应手. 我还是远远不够啊. 早就知道,dijkstra 算法可以用优先队列优化,我却一直不知道该怎样优化.当时,我的思路是这样的:假设有n个顶点, ...
- hdu 1254(dfs+bfs+优先队列)
推箱子 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem Desc ...
- 2018南京网络赛L题 Magical Girl Haze(分层图+优先队列优化的dijkstra)
使用优先队列优化过的dijkstra时间复杂度可以达到O(v*logn),还是很快的. #include <iostream> //最好是用long long ...
- POJ 1511 Invitation Cards——Dijkstra优先队列优化+反向建图
[题目描述] In the age of television, not many people attend theater performances. Antique Comedians of M ...
- nc15665 maze 题解 (传送门) 广搜bfs+优先队列
maze:原题链接 题目描述: 小明来到一个由n x m个格子组成的迷宫 ,有些格子是陷阱,用'#'表示,小明进入陷阱就会死亡,'.'表示没有陷阱.小明所在的位置用'S'表示,目的地用'T'表示. 小 ...
- 洛谷 Golden Sword(dp,优先队列优化【含板子】)|| 补充练习:洛谷 跳房子
题目链接: 「SWTR-03」Golden Sword - 洛谷 思路: 设表示放第i个原料,锅里共有 j 个时的耐久度之和. 容易知道dp方程为,其中 这样就可以写出暴力dp的代码如下:(需要枚举i ...
- Dijkstra算法堆/优先队列优化
Dijkstra算法堆/优先队列优化 前言 额外知识简介 堆与优先队列 STL库 重载 Dijkstra分析及优化 分析优化 代码实现 存储结构 边 点 优先队列 函数 初始化 添加边 Dijkstr ...
最新文章
- Windows 2003 主域控和DNS迁移到Windows 2008 R2(1)
- 简单的文本设计就能影响游戏体验?游戏中提升玩家体验的小设计
- python转go感觉难_读《我为什么从python转向go》的一些感受
- fanuc机器人码垛编程实例_FANUC 机器人码垛编程详细讲解 记得收藏!
- PyTorch 系列 | 数据加载和预处理教程
- CreateThread和_beginthread的区别
- react jquery_2019年React简介(面向仅了解jQuery的人们)
- HTML学习思维导图
- python安装后无法打开文本_Python 安装zbar-py时出现 无法打开包括文件: “unistd.h” no such file or directory...
- 数学家是如何做量化交易的
- 【爬虫】爬取个人随手记账户
- Guys, what is better than sex?
- 从零基础到高级程序员需要走多久?
- 2019清华计算机考研名单,2019年清华大学硕士研究生拟录取名单公示(清华MBA,考生编号排序)...
- PCI/PCIe 的那些事(1)- 总线基本知识
- VS中的工程文件组织
- Android屏幕常亮
- 安装Redist,运行智慧工厂管理系统
- 实现摄像头在内网、外网、gb28181 实现 “视频监控/直播” 的常用几种方式
- C++实现最小生成树算法
热门文章
- 计算机单片机英语书籍推荐,英语翻译近十几年来,单片机作为微计算机一个很重要的分支,应用广泛,发展迅速,已经对人类社会产生了深远的影响.本文介绍了基...
- 22(2)序列化以及反序列化
- 基于springmvc、ajax,后台连接数据库的增删改查
- Asp.net操作数据库方法
- select2 属性标签整理
- easyui问题小结
- phpmyadmin教程:使用phpmyadmin创建用户
- C#父类与子类(多态性)
- 你是否觉得.Net Web Service 中asmx文件是多余的?
- 成功使用Windows Live Writer 2010发布日志