Problem 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
  1. Y.#@
  2. ....
  3. .#..
  4. @..M
  5.  
  6. Y.#@
  7. ....
  8. .#..
  9. @#.M
  10.  
  11. Y..@.
  12. .#...
  13. .#...
  14. @..M.
  15. #...#
Sample Output
66
88
66
 
题解:这题很水,读完题目就有思路了,但是......在一个小细节上WA了3次...
   将人到每个可以到达位置的最小时间用bfs打表存d[][],然后后扫地图,如果扫到@的话,维护ans;
   but,有个小细节,问题在于最后维护ans,ans=min(d1[i][j]+d2[i][j], ans);这个会出现d[][]使用了初始化的值(0),即并不能到达这个位置,但由于min()的维护给我算进来了...
反思:查WA的时候,确定思路没错的话,查初始化(有否和维护的数据有冲突),查边界范围,查维护的数据
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <map>
  5. #include <queue>
  6. #define min(x,y) ((x)<(y)? (x):(y))
  7. using namespace std;
  8.  
  9. const int INF=0x3f3f3f3f;
  10. const int maxn=;
  11. char Map[maxn][maxn];
  12. int d1[maxn][maxn], d2[maxn][maxn];
  13. int dx[]={,,,-}, dy[]={,-,,};
  14.  
  15. int main ()
  16. {
  17. //freopen("in.txt", "r", stdin);
  18. int n,m;
  19. while(cin>>n>>m)
  20. {
  21. int x1,y1,x2,y2;
  22. for(int i=; i<maxn; i++)
  23. for(int j=; j<maxn; j++)
  24. {
  25. d1[i][j]=d2[i][j]=;
  26. }
  27.  
  28. for(int i=; i<n; i++)
  29. for(int j=; j<m; j++)
  30. {
  31. cin>>Map[i][j];
  32. if(Map[i][j]=='Y')
  33. x1=i, y1=j;
  34. if(Map[i][j]=='M')
  35. x2=i, y2=j;
  36. }
  37.  
  38. queue<pair<int, int> > que;
  39. pair<int, int> p;
  40. p.first=x1, p.second=y1;
  41. que.push(p);
  42. while(que.size())
  43. {
  44. p=que.front(); que.pop();
  45. for(int i=; i<; i++)
  46. {
  47. int nx=p.first+dx[i], ny=p.second+dy[i];
  48. if( nx>=&&nx<n&&ny>=&&ny<m && (Map[nx][ny]=='.'||Map[nx][ny]=='@') && d1[nx][ny]==)
  49. {
  50. que.push(make_pair(nx,ny));
  51. d1[nx][ny]=d1[p.first][p.second]+;
  52. }
  53. }
  54. }
  55.  
  56. p.first=x2, p.second=y2;
  57. que.push(p);
  58. while(que.size())
  59. {
  60. p=que.front(), que.pop();
  61. for(int i=; i<; i++)
  62. {
  63. int nx=p.first+dx[i], ny=p.second+dy[i];
  64. if( nx>=&&nx<n&&ny>=&&ny<m && (Map[nx][ny]=='.'||Map[nx][ny]=='@') && d2[nx][ny]==)
  65. {
  66. que.push(make_pair(nx,ny));
  67. d2[nx][ny]=d2[p.first][p.second]+;
  68. }
  69. }
  70. }
  71.  
  72. int ans=INF;
  73. for(int i=; i<n; i++)
  74. for(int j=; j<m; j++)
  75. if(Map[i][j]=='@')
  76. {
  77. if(d1[i][j]!=&&d2[i][j]!=)
  78. //这个判断之前没有想到,一直wa,后来看了下discuss,才发现这个问题,
  79. //发现这个问题后,我最先d初始化为0改成初始化d为INF=0x3f3f3f3f,会溢出输出负数,
  80. //发现自己很sb,算dis,d肯定初始化为0呀...,我看到这个min(d1[i][j]+d2[i][j], ans)有问题,就想到初始化为INF......
  81. ans=min(d1[i][j]+d2[i][j], ans);
  82. }
  83. cout<<ans*<<endl;
  84. }
  85. return ;
  86. }

HDU 2612 (2次BFS,有点小细节)的更多相关文章

  1. hdu 2612 多终点BFS

    Find a way Problem Description Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at ...

  2. HDU.2612 Find a way (BFS)

    HDU.2612 Find a way (BFS) 题意分析 圣诞节要到了,坤神和瑞瑞这对基佬想一起去召唤师大峡谷开开车.百度地图一下,发现周围的召唤师大峡谷还不少,这对基佬纠结着,该去哪一个...坤 ...

  3. BFS(最短路) HDU 2612 Find a way

    题目传送门 /* BFS:和UVA_11624差不多,本题就是分别求两个点到KFC的最短路,然后相加求最小值 */ /***************************************** ...

  4. HDU 2612 Find a way(双向bfs)

    题目代号:HDU 2612 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2612 Find a way Time Limit: 3000/1000 M ...

  5. HDU 2612 Find a way(找条路)

    HDU 2612 Find a way(找条路) 00 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)   Problem  ...

  6. Oracle Sales Cloud:管理沙盒(定制化)小细节2——使用对象触发器更新数字字段

    在上一篇 "管理沙盒(定制化)小细节1" 的随笔中,我们使用公式法在 "业务机会" 对象(单头)上建立了 "利润合计" 字段,并将它等于 & ...

  7. Oracle Sales Cloud:管理沙盒(定制化)小细节1——利用公式创建字段并显示在前端页面

    Oracle Sales Cloud(Oracle 销售云)是一套基于Oracle云端的CRM管理系统.由于 Oracle 销售云是基于 Oracle 云环境的,它与传统的管理系统相比,显著特点之一便 ...

  8. Oracle Sales Cloud:报告和分析(BIEE)小细节2——利用变量和过滤器传参(例如,根据提示展示不同部门的数据)

    在上一篇随笔中,我们建立了部门和子部门的双提示,并将部门和子部门做了关联.那么,本篇随笔我们重点介绍利用建好的双提示进行传参. 在操作之前,我们来看一个报告和分析的具体需求: [1] 两个有关联的提示 ...

  9. Oracle Sales Cloud:报告和分析(BIEE)小细节1——创建双提示并建立关联(例如,部门和子部门提示)

    Oracle Sales Cloud(Oracle 销售云)是一套基于Oracle云端的客户商机管理系统,通过提供丰富的功能来帮助提高销售效率,更好地去了解客户,发现和追踪商机,为最终的销售成交 (d ...

随机推荐

  1. 怎样理解JAVA的“构造方法”和“主方法”

    在类中除了成员方法之外,还存在一种特殊类型的方法,那就是构造方法.主方法是类的入口点,它定义了程序从何处开始: 主方法提供对程序流向的控制,Java编译器通过主方法来执行程序.那么,下面一起来看一下关 ...

  2. Eclipse+pydev+手动安装

    1.Eclipse中手动安装pydev插件 解决:Eclipse版本中的windows-performance下面无法显示pydev的情况 1.Eclipse版本是:Version: Luna Ser ...

  3. java_工厂模式

    定义: 初学者总是把所有的代码写在一个类里面,这样是非常危险的,因为所有错误集中在一个类里了,而且代码一长,调试就很困难 所以参照工厂流水线,分车间分模块来写代码,在实际操作中也就是说将代码模块化,封 ...

  4. Socket 的网络编程

    socket 网络编程的服务端: 1) 创建socket 套接字. 2) 和socket绑定主机地址和端口 3) socket 主动监听端口,看又没有来连接. 4) 当执行到 accept() 时, ...

  5. sourceTree回退撤销commit

    https://blog.csdn.net/gang544043963/article/details/71511958

  6. 洛谷P4396 作业 [AHOI2013] 莫队

    正解:莫队 解题报告: 传送门! 天呐太久没做莫队了连板子都认不出来了,,,所以复健下做下莫队的题目QAQ 就很板子鸭,和莫队板子比好像只有一个离散化,,,?就不讲了QAQ 等下直接放代码QAQ ov ...

  7. 【JVM】-NO.110.JVM.1 -【GC垃圾收集器】

    Style:Mac Series:Java Since:2018-09-10 End:2018-09-10 Total Hours:1 Degree Of Diffculty:5 Degree Of ...

  8. Spring框架的第三天

    ## Spring框架的第三天 ## ---------- **课程回顾:Spring框架第二天** 1. IOC的注解方式 * @Value * @Resource(name="" ...

  9. nginx rewrite 指令

    ginx通过ngx_http_rewrite_module模块支持url重写.支持if条件判断,但不支持else. 该模块需要PCRE支持,应在编译nginx时指定PCRE源码目录, nginx安装方 ...

  10. vmstat性能分析介绍

    vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况.这个命令是我查看Linux/Unix最 ...