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
Y.#@
....
.#..
@..M Y.#@
....
.#..
@#.M Y..@.
.#...
.#...
@..M.
#...#
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的时候,确定思路没错的话,查初始化(有否和维护的数据有冲突),查边界范围,查维护的数据
 #include <iostream>
#include <cstdio>
#include <cstring>
#include <map>
#include <queue>
#define min(x,y) ((x)<(y)? (x):(y))
using namespace std; const int INF=0x3f3f3f3f;
const int maxn=;
char Map[maxn][maxn];
int d1[maxn][maxn], d2[maxn][maxn];
int dx[]={,,,-}, dy[]={,-,,}; int main ()
{
//freopen("in.txt", "r", stdin);
int n,m;
while(cin>>n>>m)
{
int x1,y1,x2,y2;
for(int i=; i<maxn; i++)
for(int j=; j<maxn; j++)
{
d1[i][j]=d2[i][j]=;
} for(int i=; i<n; i++)
for(int j=; j<m; j++)
{
cin>>Map[i][j];
if(Map[i][j]=='Y')
x1=i, y1=j;
if(Map[i][j]=='M')
x2=i, y2=j;
} queue<pair<int, int> > que;
pair<int, int> p;
p.first=x1, p.second=y1;
que.push(p);
while(que.size())
{
p=que.front(); que.pop();
for(int i=; i<; i++)
{
int nx=p.first+dx[i], ny=p.second+dy[i];
if( nx>=&&nx<n&&ny>=&&ny<m && (Map[nx][ny]=='.'||Map[nx][ny]=='@') && d1[nx][ny]==)
{
que.push(make_pair(nx,ny));
d1[nx][ny]=d1[p.first][p.second]+;
}
}
} p.first=x2, p.second=y2;
que.push(p);
while(que.size())
{
p=que.front(), que.pop();
for(int i=; i<; i++)
{
int nx=p.first+dx[i], ny=p.second+dy[i];
if( nx>=&&nx<n&&ny>=&&ny<m && (Map[nx][ny]=='.'||Map[nx][ny]=='@') && d2[nx][ny]==)
{
que.push(make_pair(nx,ny));
d2[nx][ny]=d2[p.first][p.second]+;
}
}
} int ans=INF;
for(int i=; i<n; i++)
for(int j=; j<m; j++)
if(Map[i][j]=='@')
{
if(d1[i][j]!=&&d2[i][j]!=)
//这个判断之前没有想到,一直wa,后来看了下discuss,才发现这个问题,
//发现这个问题后,我最先d初始化为0改成初始化d为INF=0x3f3f3f3f,会溢出输出负数,
//发现自己很sb,算dis,d肯定初始化为0呀...,我看到这个min(d1[i][j]+d2[i][j], ans)有问题,就想到初始化为INF......
ans=min(d1[i][j]+d2[i][j], ans);
}
cout<<ans*<<endl;
}
return ;
}

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. 再次重温《Right here waiting》

    记得高中时候听到这首曲子(当时还让同桌帮我抄了这首曲子,后来这个本子也不知道扔到哪里去了), 前天偶尔在虾米遇到这首曲子,过去的青涩岁月历历在目,自己手动打打歌词,一方面是为了重温这首曲子,另一方面, ...

  2. java.lang.NoClassDefFoundError 错误

    练习jfianl,,,配置数据库插件的时候遇到: java.lang.NoClassDefFoundError: com/mchange/v2/c3p0/ComboPooledDataSource 解 ...

  3. 通过阿里云命令行工具 aliyuncli 购买服务器

    开始想通过 aliyuncli 的 golang 源码进行编译安装(注:python 版的 aliyuncli 已不再维护),但没成功,详见 通过 golang 源码编译阿里云命令行工具 aliyun ...

  4. PrimeNG之DataTable

    --数据表显示在表格格式数据. Basic Import import {DataTableModule,SharedModule} from 'primeng/primeng'; source &l ...

  5. Java项目引用外部jar包时,使用bat启动

    1.将项目导出为jar包 1)点击项目—>右击—>点击Export—>进入export页面 2)点击JAR file——>Next——>勾选项目——>选择jar包存 ...

  6. java框架之Hibernate(1)-简介及初使用

    简介 hibernate 是一个开源 ORM ( Object / Relationship Mipping ) 框架,它是对象关联关系映射的持久层框架,它对 JDBC 做了轻量级的封装,而我们 ja ...

  7. mysql 远程登录

    mysql -h 192.168.5.116 -P 3306 -u root -p123456

  8. python数据结构-如何实现用户的历史记录功能

    如何实现用户的历史记录功能 使用collections中的deque from collections import deque dq = deque([], 5) dq.append(1) dq.a ...

  9. git----------git:如何让git识别我修改了文件夹名字和文件名字的大小写问题。

    修改每个项目里面的隐藏的.git文件里面的config文件.将箭头指的原本是true改成false.

  10. egg.js基础入门

    之前一直使用koa, 刚刚接触egg, 做了一些入门的笔记 准备工作 1  首先安装脚手架,,并创建项目. $ npm i egg-init -g $ egg-init egg-demo --type ...