题目链接:https://vjudge.net/problem/HDU-2612

题意:‘@’表示KTV,‘#’表示无法走的地方,‘Y’,'M’表示两个人,他们要在KTV见面,问他们都到达KTV要花费的时间之和。

思路:两个bfs,一个从‘M’开始,一个从‘Y’开始,跑完之后,遍历地图,找出所有KTV,并记录最短用时。


  1. #include <iostream>
  2. #include <cstring>
  3. #include<vector>
  4. #include<string>
  5. #include <cmath>
  6. #include <map>
  7. #include <queue>
  8. #include <algorithm>
  9. using namespace std;
  10.  
  11. #define inf (1LL << 31) - 1
  12. #define rep(i,j,k) for(int i = (j); i <= (k); i++)
  13. #define rep__(i,j,k) for(int i = (j); i < (k); i++)
  14. #define per(i,j,k) for(int i = (j); i >= (k); i--)
  15. #define per__(i,j,k) for(int i = (j); i > (k); i--)
  16.  
  17. const int N = ;
  18. int mv_x[] = { , , -, };
  19. int mv_y[] = { , -, , };
  20. int spent[N][N]; //两个人跑出的花费记录在这
  21. bool vis[N][N];
  22. char mp[N][N];
  23. int n, m;
  24. int yi, yj, mi, mj; //两个人的坐标
  25.  
  26. struct node{
  27.  
  28. int x, y, v;
  29. };
  30.  
  31. inline void init(){
  32. rep(i, , n) rep(j, , m) spent[i][j] = ;
  33. }
  34.  
  35. void input(){
  36. rep(i, , n){
  37. rep(j, , m){
  38. cin >> mp[i][j];
  39. if (mp[i][j] == 'M') mi = i, mj = j;
  40. else if (mp[i][j] == 'Y') yi = i, yj = j;
  41. }
  42. }
  43. }
  44.  
  45. //是否越界
  46. inline bool check(int x, int y){
  47. return x >= && x <= n && y >= && y <= m;
  48. }
  49.  
  50. void bfs(int pi, int pj){
  51.  
  52. rep(i, , n) rep(j, , m) vis[i][j] = false;//初始化vis[][]
  53.  
  54. queue<node > que;
  55. vis[pi][pj] = true;
  56. que.push(node{ pi, pj, });
  57.  
  58. while (!que.empty()){
  59.  
  60. node tmp = que.front();
  61. que.pop();
  62.  
  63. rep__(p, , ){
  64. int dx = tmp.x + mv_x[p];
  65. int dy = tmp.y + mv_y[p];
  66.  
  67. if (check(dx, dy) && !vis[dx][dy] && mp[dx][dy] != '#'){
  68. vis[dx][dy] = true;
  69. spent[dx][dy] += tmp.v; //花费时间叠加
  70. que.push(node{ dx, dy, tmp.v + });
  71. }
  72. }
  73. }
  74. }
  75.  
  76. void get_ans(){
  77.  
  78. int ans = inf;
  79. //如果spent[][] == 0 说明该‘@’无法到达,需要特判
  80. rep(i, , n){
  81. rep(j, , m){
  82. if (spent[i][j] && mp[i][j] == '@'){
  83. ans = min(ans, spent[i][j]);
  84. }
  85.  
  86. }
  87. }
  88. cout << ans * << endl;
  89. }
  90.  
  91. int main(){
  92.  
  93. ios::sync_with_stdio(false);
  94. cin.tie();
  95.  
  96. while (cin >> n >> m){
  97.  
  98. init();//初始化
  99. input();//输入
  100. bfs(yi, yj);//第一个人
  101. bfs(mi, mj);//第二个人
  102. get_ans();//得到答案
  103. }
  104.  
  105. return ;
  106. }

kuangbin专题 专题一 简单搜索 Find a way HDU - 2612的更多相关文章

  1. [kuangbin带你飞]专题一 简单搜索 Find a way HDU - 2612

    Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. Leave Ningbo one year ...

  2. kuangbin专题总结一 简单搜索

    A - 棋盘问题:在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有 ...

  3. 简单搜索 kuangbin C D

    C - Catch That Cow POJ - 3278 我心态崩了,现在来回顾很早之前写的简单搜索,好难啊,我怎么写不出来. 我开始把这个写成了dfs,还写搓了... 慢慢来吧. 这个题目很明显是 ...

  4. ElasticSearch 5学习(4)——简单搜索笔记

    空搜索: GET /_search hits: total 总数 hits 前10条数据 hits 数组中的每个结果都包含_index._type和文档的_id字段,被加入到_source字段中这意味 ...

  5. nyoj 284 坦克大战 简单搜索

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=284 题意:在一个给定图中,铁墙,河流不可走,砖墙走的话,多花费时间1,问从起点到终点至少 ...

  6. 分布式搜索ElasticSearch构建集群与简单搜索实例应用

    分布式搜索ElasticSearch构建集群与简单搜索实例应用 关于ElasticSearch不介绍了,直接说应用. 分布式ElasticSearch集群构建的方法. 1.通过在程序中创建一个嵌入es ...

  7. solr简单搜索案例

    solr简单搜索案例 使用Solr实现电商网站中商品信息搜索功能,可以根据关键字搜索商品信息,根据商品分类.价格过滤搜索结果,也可以根据价格进行排序,实现分页. 架构分为: 1. solr服务器 2. ...

  8. 和我一起打造个简单搜索之SpringDataElasticSearch入门

    网上大多通过 java 操作 es 使用的都是 TransportClient,而介绍使用 SpringDataElasticSearch 的文章相对比较少,笔者也是摸索了许久,接下来本文介绍 Spr ...

  9. 和我一起打造个简单搜索之SpringDataElasticSearch关键词高亮

    前面几篇文章详细讲解了 ElasticSearch 的搭建以及使用 SpringDataElasticSearch 来完成搜索查询,但是搜索一般都会有搜索关键字高亮的功能,今天我们把它给加上. 系列文 ...

随机推荐

  1. windows服务的编写,手动安装与卸载

    windows服务的编写 1.要添加的引用 using System.ServiceProcess; using System.ServiceModel ; using WcfServiceLibra ...

  2. fileapi.h里的API函数(包括LockFileEx和FindFirstChangeNotification函数)

    /** * This file is part of the mingw-w64 runtime package. * No warranty is given; refer to the file ...

  3. Substring详解

    class Program { static void Main(string[] args) { string str = "Hello World!"; ; //Substri ...

  4. 用VS2010构建MASM的编程环境,开始使用MASM(翻译自《Inetl汇编语言程序设计》一书的作者Kip R. Irvine的文章Getting Started with MASM),两种方法搭建IA-32汇编设计环境

    http://blog.csdn.net/jinsonghu/article/details/5688020 http://blog.csdn.net/jinsonghu/article/detail ...

  5. 正则表达式-Csharp

    原文:正则表达式-Csharp 学习笔记:正则表达式 一. 正则表达式 正则表达式(Regex)是用来进行文本处理的技术,是语言无关的,在几乎所有语言中都有实现. 一个正则表达式就是由普通的字符及特殊 ...

  6. 重写QLineEdit,实现编辑框内添加删除按钮的功能(随时把控件Move到一个地方,然后show就可以了,这是万能的办法)

    http://www.qtcn.org/bbs/read-htm-tid-62265-ds-1-page-1.html#180286

  7. mysql远程表链接

    FEDERATED简介 FEDERATED存储引擎是访问远程数据库中的表,在平时开发中可以用此特性来访问远程库中的参数表之类的,还是非常方便的.使用时直接在本地构建一个federated表来链接远程数 ...

  8. 爬取虎扑NBA首页主干道推荐贴的一只小爬虫,日常爬不冷笑话解闷

    虎扑是广大jrs的家园,步行街是这个家园里最繁华的地段.据称广大jrs平均学历985,步行街街薪30w起步. 大学时经舍友安利,开始了解虎扑,主要是看看NBA的一些资讯. 偶尔也上上这个破街,看看jr ...

  9. C语言实现常用排序算法——基数排序

    #include<stdio.h> #include<math.h> #define SIZE 10 #define C_SIZE 20 /*行数稳定=10,切记!列数务必搞的 ...

  10. vmware centos7虚拟机克隆系统如何修改网卡设置?

    1.克隆虚拟机,克隆前需关闭虚拟机2.克隆之后的网卡问题解决,其中需要修改HWADDR和UUID  /etc/sysconfig/network-scripts/ifcfg-ens32  uuid获取 ...