题目链接:https://ac.nowcoder.com/acm/contest/6607/D

Description

万物皆虚,万事皆允,玩过刺客信条的人对这句话应该都不会感到陌生
小A也是非常痴迷于这款游戏,正巧最近《刺客信条·奥德赛》发布了,然而其高昂的价格让小A苦恼不已
于是,小A只好重玩一次最经典的刺客信条2,来抚慰自己受伤的心灵
按照刺客信条2的剧情,艾吉奥需要前往威尼斯,从圣殿骑士手里夺取金苹果,然后前往罗马梵蒂冈刺杀教皇,拿取伊甸园神器“教皇权杖”
但是由于小A已经玩过很多次这个游戏了,他对剧情和地图了如指掌,现在已经轻而易举地拿到了金苹果,返回到了佛罗伦萨的庄园

接下来,小A就将操控艾吉奥从佛罗伦萨庄园出发,前往梵蒂冈,夺取教皇权杖。
在整个过程中,每经过一个建筑,都需要花费一定的时间,需要特别注意的是,由于圣母百花大教堂、圣马可大教堂、乔托钟楼都有众多圣殿骑士守护,经过这三个地方时,你需要花费100的时间
小A已经急不可耐地想要通关了,所以希望花费最少的时间到达梵蒂冈,请你帮他计算一下,从佛罗伦萨庄园到梵蒂冈,最快需要多少时间?

Input

第一行有两个整数,表示地图的行数n和列数m,地图为一个n×m的矩阵
接下来有n行,每行m个字符,每个字符是一个数字或大写字母,数字表示经过该建筑需要的时间,字母表示特定建筑(S表示佛罗伦萨的庄园,即起点;E表示梵蒂冈,即终点;A表示圣母百花大教堂;B表示圣马可大教堂;C表示乔托钟楼;A、B、C在每组数据中至多出现一次),每个字符或数字之间用空格分隔
为了降低游戏难度,小A特意调小了地图
0≤n,m≤30

Output

输出一个整数,从佛罗伦萨庄园到梵蒂冈的最小用时T

Sample Input
3 3
S A E
1 2 3
1 B 3
Sample Output
6
Solution

显然这是个BFS的题,不过如果只用普通队列是不行的,因为有特定建筑的存在,导致最短距离不一定用时最短。这里我们可以使用一下优先队列,每次拿出用时最短的那个点去更新,直到到达终点即可。

Code
#include<iostream>
#include<algorithm>
#include<string>
#include<iomanip>
#include<set>
#include<queue>
#include<map>
using namespace std;
#define ll long long
char f[31][31];
bool vis[31][31];
int dx[4] = { 0,1,0,-1 };
int dy[4] = { 1,0,-1,0 };
int n, m, q, sx, sy, ex, ey;
struct node
{int x, y, t;//t表示起点到达点(x,y)所花的时间node(int m_x = 0, int m_y = 0, int m_time = 0) :x(m_x), y(m_y), t(m_time) {}bool operator<(const node& a) const {return t > a.t;}
};
int bfs() {priority_queue<node> p;p.push(node(sx, sy, 0));while (!p.empty()){node temp = p.top();p.pop();if (vis[temp.x][temp.y]) continue;vis[temp.x][temp.y] = 1;int xx, yy;for (int i = 0; i < 4; i++) {xx = temp.x + dx[i];yy = temp.y + dy[i];if (xx == ex && yy == ey) return temp.t;if (xx >= 0 && yy >= 0 && xx < n && yy < m  && vis[xx][yy] == 0) {if(f[xx][yy]=='A'||f[xx][yy]=='B'||f[xx][yy]=='C') p.push(node(xx, yy, temp.t + 100));else p.push(node(xx, yy, temp.t + int(f[xx][yy]-48)));}}}
}
int main() {ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);cin >> n >> m;for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {vis[i][j] = 0;}}for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {cin >> f[i][j];if (f[i][j] == 'S') {sx = i; sy = j;}else if (f[i][j] == 'E') {ex = i; ey = j;}}}cout << bfs() << endl;return 0;
}

感觉有帮助的话,点个赞再走吧!

牛客算法周周练17 D题 - 刺客信条 C++相关推荐

  1. 牛客算法周周练2 B Music Problem(DP,抽屉原理,二进制拆分)

    链接:https://ac.nowcoder.com/acm/contest/5203/B 来源:牛客网 题目描述 Listening to the music is relax, but for o ...

  2. 牛客网-小周的曲射炮

    牛客网-小周的曲射炮(公式推导) 题目描述 小周最近在玩一款二战游戏,他因而对曲射炮的轨迹产生了很大的兴趣,但是在尝试计算后,小周发现这个问题并不是那么简单,他因而来请教你这位计算机高手,请你来帮帮他 ...

  3. 牛客网--蘑菇街2016研发工程师编程题

    牛客网--蘑菇街2016研发工程师编程题 第一题: 搬圆桌 时间限制:1秒 空间限制:32768K 现在有一张半径为r的圆桌,其中心位于(x,y),现在他想把圆桌的中心移到(x1,y1).每次移动一步 ...

  4. 「解析」牛客网-华为机考企业真题 1-20

    又是一年春招时,有幸收到华为自动驾驶算法岗,之前刷题不多,在此汇总下牛客网的真题,主要采用Python编写,个人觉得语言只是实现工具而已,并不是很关键,Python简洁易懂,更加适合算法工程师快速验证 ...

  5. 「解析」牛客网-华为机考企业真题 41-60

    又是一年春招时,有幸收到华为自动驾驶算法岗,之前刷题不多,在此汇总下牛客网的真题,主要采用Python编写,个人觉得语言只是实现工具而已,并不是很关键,Python简洁易懂,更加适合算法工程师快速验证 ...

  6. 「解析」牛客网-华为机考企业真题 81-108

    又是一年春招时,有幸收到华为自动驾驶算法岗,之前刷题不多,在此汇总下牛客网的真题,主要采用Python编写,个人觉得语言只是实现工具而已,并不是很关键,Python简洁易懂,更加适合算法工程师快速验证 ...

  7. 「解析」牛客网-华为机考企业真题 21-40

    又是一年春招时,有幸收到华为自动驾驶算法岗,之前刷题不多,在此汇总下牛客网的真题,主要采用Python编写,个人觉得语言只是实现工具而已,并不是很关键,Python简洁易懂,更加适合算法工程师快速验证 ...

  8. 牛客网 Java 工程师能力评估 20 题 - 详解

    牛客网 Java 工程师能力评估 20 题 - 详解 不知在看博客的你是否知道 牛客网,不知道就太落后了,分享给你 : 牛客网 此 20 题,绝对不只是 20 题! 免责声明:本博客为学习笔记,如有侵 ...

  9. 牛客小白月赛16 小石的签到题(博弈)

    牛客小白月赛16 小石的签到题 链接:https://ac.nowcoder.com/acm/contest/949/A来源:牛客网 题目描述 输入描述: 共一行,输入一个数 nnn . 输出描述: ...

最新文章

  1. SPSiteManager 2.3可以下载了
  2. matlab碎纸拼接相似函数,基于蒙特卡洛算法构建能量函数的碎纸图片拼接方法
  3. 深入理解Spark 2.1 Core (一):RDD的原理与源码分析
  4. time函数python_Python连载6-time包函数简介
  5. 弃用Java的终结器
  6. NX机制及绕过策略-ret2libc
  7. mysql数据库修改数据库名称_MySQL数据库之MySQL 修改数据库名称的一个新奇方法...
  8. ServiceLoader用法demo
  9. RQNOJ 140 分配时间:dp
  10. 费曼纪念日,霍金和蚁人下了一盘的“量子象棋”
  11. c语言程序 实现简单计算器功能,C语言实现简单计算器功能(2)
  12. 【通信原理】揭开傅里叶级数与傅里叶变换的神秘面纱
  13. 实现LZW字典压缩算法
  14. 高斯投影坐标转换正算参数
  15. Kurento应用开发指南(以Kurento 5.0为模板) 之四:示例教程 一对一视频呼叫
  16. 假设你有8个球,其中一个略微重一些,但是找出这个球的唯一方法是将两个球放在天平上对比。最少要称多少次才能找出这个较重的球?
  17. Spark RDD与Partion
  18. android图片上水印字体颜色,Android给图片添加文字和水印
  19. 博实结将在创业板上会:计划募资25亿元,周小强为实际控制人
  20. 区块链知识系列 - BTC和ETH的区别

热门文章

  1. 柏睿数据总裁梁雪青:在智能制造上,流数据库用武之地更大
  2. vscode报错未能保存,文件的内容较新
  3. QT Creator新建工程后卡死解决方法
  4. 狗尾草邱楠:2018 AI硬件没有新鲜事 1
  5. 基于Codeblock的LVGL模拟器Windows平台环境搭建[带源码]
  6. C#加载动态链接库的类
  7. 没想到,项目经理也逃不过新东方直播间
  8. Python 爬虫统计当地所有医院信息
  9. Oracle数据库REMOTE_LOGIN_PASSWORDFILE参数的设置
  10. 科研必备网站(收藏夹吃灰系列)