Description

Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. Leave Ningbo one year, yifenfei have many people to meet. Especially a good friend Merceki.
Yifenfei’s home is at the countryside, but Merceki’s home is in the center of city. So yifenfei made arrangements with Merceki to meet at a KFC. There are many KFC in Ningbo, they want to choose one that let the total time to it be most smallest.
Now give you a Ningbo map, Both yifenfei and Merceki can move up, down ,left, right to the adjacent road by cost 11 minutes.
 

Input

The input contains multiple test cases.
Each test case include, first two integers n, m. (2<=n,m<=200).
Next n lines, each line included m character.
‘Y’ express yifenfei initial position.
‘M’    express Merceki initial position.
‘#’ forbid road;
‘.’ Road.
‘@’ KCF
 

Output

For each test case output the minimum total time that both yifenfei and Merceki to arrival one of KFC.You may sure there is always have a KFC that can let them meet.
 

Sample Input

4 4
Y.#@
....
.#..
@..M
4 4
Y.#@
....
.#..
@#.M
5 5
Y..@.
.#...
.#...
@..M.
#...#

 

Sample Output

66
88
66
 
 
问题分析:依旧是bfs,不过要考虑kfc被包围,以及重置地图,和两人所占位都是可以互相走过的。
  1. #include "iostream"
  2. #include "queue"
  3. using namespace std;
  4. struct ma
  5. {
  6. char z;
  7. int sum;
  8. };
  9. struct person
  10. {
  11. int i;
  12. int j;
  13. int time;
  14. };
  15. int v[][] ={,,-,,,-,,};
  16. ma maze[][];
  17. ma maze2[][];
  18. person fir,sec;
  19. void scopy(int n,int m)
  20. {
  21. for (int i=;i<=n+;i++)
  22. for (int j=;j<=m+;j++)
  23. {
  24. if (maze2[i][j].z == '@')
  25. maze[i][j].z = '@';
  26. else
  27. maze[i][j]=maze2[i][j];
  28. }
  29. }
  30. void mbegin(int n,int m)
  31. {
  32. int i,j;
  33. for (i=;i<=n+;i++)
  34. for (j=;j<=m+;j++)
  35. if (i*j == || i == n+ || j ==m+)
  36. maze2[i][j].z ='#';
  37. else
  38. {
  39. cin>>maze2[i][j].z;
  40. maze2[i][j].sum=;
  41. maze[i][j].sum=;
  42. if (maze2[i][j].z == 'Y')
  43. {
  44. fir.i = i;
  45. fir.j = j;
  46. }
  47. if (maze2[i][j].z == 'M')
  48. {
  49. sec.i =i;
  50. sec.j =j;
  51. }
  52. }
  53. }
  54. void bfs(person &then)
  55. {
  56. queue<person> p;
  57. person next;
  58. then.time=;
  59. maze[then.i][then.j].z = '#';
  60. p.push(then);
  61. while (!p.empty())
  62. {
  63. next = p.front();
  64. p.pop();
  65. for (int k=;k<;k++)
  66. {
  67. then.i = next.i+v[k][];
  68. then.j = next.j+v[k][];
  69. if (maze[then.i][then.j].z != '#')
  70. {
  71. then.time = next.time+;
  72. if (maze[then.i][then.j].z == '@')
  73. maze[then.i][then.j].sum += then.time;
  74. maze[then.i][then.j].z ='#';
  75. p.push(then);
  76. }
  77. }
  78. }
  79. }
  80. int mintime(int n,int m)
  81. {
  82. int k=,time;
  83. for (int i=;i<=n;i++)
  84. for (int j=;j<=m;j++)
  85. if (maze[i][j].z == '@')
  86. {
  87. if (maze[i][j].sum == )
  88. continue;
  89. if (k++ == )
  90. time=maze[i][j].sum;
  91. if (time > maze[i][j].sum)
  92. time=maze[i][j].sum;
  93. }
  94. return time;
  95. }
  96. int main()
  97. {
  98. int n,m;
  99. while (cin>>n>>m)
  100. {
  101. mbegin(n,m);
  102. scopy(n,m);
  103. bfs(fir);
  104. scopy(n,m);
  105. bfs(sec);
  106. scopy(n,m);
  107. cout<<mintime(n,m)<<endl;
  108. }
  109. return ;
  110. }

暑假集训(1)第四弹 -----Find a way(Hdu2612)的更多相关文章

  1. 暑假集训(4)第四弹 -----排列,计数(hdu1465)

    题意概括:嗯,纵使你数次帮助小A脱离困境,但上一次,小A终于还是失败了.那数年的奔波与心血,抵不过轻轻一指,便彻底 湮灭,多年的友谊终归走向末路.这一切重击把小A彻底击溃! 不为什么,你到底还是要继续 ...

  2. 暑假集训(3)第四弹 -----Frogger(Poj2253)

    题意梗概:青蛙王子最近喜欢上了另一只经常坐在荷叶上的青蛙公主.不过这件事不小心走漏了风声,被某fff团团员知 道了,在青蛙王子准备倾述心意的那一天,fff团团员向湖泊中注入大量的充满诅咒力量的溶液.这 ...

  3. 暑假集训(2)第四弹 ----- 敌兵布阵(hdu1166)

    D - 敌兵布阵 Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:32768KB     64bit ...

  4. 暑假集训(2)第七弹 -----今年暑假不AC(hdu2037)

    J - 今年暑假不AC Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:32768KB     64 ...

  5. 暑假集训(4)第五弹——— 数论(hdu1222)

    题意概括:那天以后,你好说歹说,都快炼成三寸不烂之舍之际,小A总算不在摆着死人脸,鼓着死鱼眼.有了点恢复的征兆.可孟子这家伙说的话还是有点道理,那什么天将降....额,总之,由于贤者法阵未完成,而小A ...

  6. 暑假集训(4)第八弹——— 组合(hdu1524)

    题意概括:你已经赢得两局,最后一局是N个棋子往后移动,最后一个无法移动的玩家失败. 题目分析:有向无环图sg值游戏,尼姆游戏的抽象表达.得到每个棋子的sg值之后,把他们异或起来,考察异或值是否为0. ...

  7. 暑假集训(4)第七弹——— 组合(hdu1850)

    题意概括:你赢得了第一局.魔鬼给出的第二局是,如果有N堆牌,先手的人有几种可能胜利. 问题分析:尼姆游戏,先得到n堆牌的数量异或和,再将异或和与每一个牌组的数量异或,如果结果小于原牌组数量 则可能++ ...

  8. 暑假集训(4)第六弹——— 组合(poj1067)

    题意概括:上一次,你成功甩掉了fff机械兵.不过,你们也浪费了相当多的时间.fff团已经将你们团团包围,并且逐步 逼近你们的所在地.面对如此危机,你不由得悲观地想:难道这acm之路就要从此中断?虽然走 ...

  9. 暑假集训(4)第三弹 -----递推(Hdu1799)

    问题描述:还记得正在努力脱团的小A吗? 他曾经最亲密的战友,趁他绘制贤者法阵期间,暗中设下鬼打墙将小A 围困,并准备破坏小A正在绘制的法阵.小A非常着急.想阻止他的行动.而要阻止他,必须先破解鬼打墙. ...

随机推荐

  1. MapReduce自定义类输出的内容为内存地址

    13480253104 mapreduce.KpiWritable@486a58c4 13502468823 mapreduce.KpiWritable@3de9d100 13560439658 ma ...

  2. 8-15-Exercise

    8-15-小练 这次的题目......只觉得泪奔啊......T T A.HDU 1042   N! 因为0<=n<=1000,故一定要用数组或字符串[同样因为n<=1000故用数组 ...

  3. Robotium学习笔记一

    一. 重签名问题 1.从手机Pull所需的apk通过压缩工具删除META-INF目录 2.通过以下命令行进行签名 >jarsigner -keystore "C:\Documents ...

  4. Jquery常用方法篇(一)

    1.add方法:将匹配的元素添加到当前的jquery对象集合中. 语法 add(expr,[context]) 参数1表示 用于匹配元素选择器(待添加的对象),或者用于动态生成的HTML代码(字符串) ...

  5. 百度的TSDB——可针对tag查询,应该类似kairosDB

    天工架构 目前,天工平台的服务主要由物接入.物解析.物管理.规则引擎和时序数据库组成,并可无缝对接百度云天算智能大数据平台及基础平台产品,可提供千万级设备接入的能力,百万数据点每秒的读写性能,超高的压 ...

  6. Codeforces Round #382 (Div. 2)E. Ostap and Tree

    E. Ostap and Tree time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  7. NASA关于如何写出安全代码的10条军规

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:NASA关于如何写出安全代码的10条军规.

  8. spring tranaction 事务入门

    一.事务四个属性 原子性(atomicity).一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做. 一致性(consistency).事务必须是使数据库从一个一致性状态变到另一 ...

  9. JavaWeb文件的上传与下载(1)

    经常用到的上传: 头像上传,资料分享等 文件上传的步骤 1.指定表单类型为文件上传表单 enctype="multipart/form-data" 2.表单提交方式必须为:post ...

  10. 免费安卓IOS测试API接口,后续会陆续增加接口

    各位博友好!开发的安卓或者ios的朋友们,经常会遇到想测试但是没有公开的api接口进行进行测试.但自己又不会开发服务端或者没有服务器,这里我免费提供了一整套API接口.欢迎大家调用,目标是方便大家. ...