HDU 2612 (2次BFS,有点小细节)
Problem Description
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.
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
Y.#@
....
.#..
@..M Y.#@
....
.#..
@#.M Y..@.
.#...
.#...
@..M.
#...#
#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,有点小细节)的更多相关文章
- hdu 2612 多终点BFS
Find a way Problem Description Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at ...
- HDU.2612 Find a way (BFS)
HDU.2612 Find a way (BFS) 题意分析 圣诞节要到了,坤神和瑞瑞这对基佬想一起去召唤师大峡谷开开车.百度地图一下,发现周围的召唤师大峡谷还不少,这对基佬纠结着,该去哪一个...坤 ...
- BFS(最短路) HDU 2612 Find a way
题目传送门 /* BFS:和UVA_11624差不多,本题就是分别求两个点到KFC的最短路,然后相加求最小值 */ /***************************************** ...
- 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 ...
- HDU 2612 Find a way(找条路)
HDU 2612 Find a way(找条路) 00 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem ...
- Oracle Sales Cloud:管理沙盒(定制化)小细节2——使用对象触发器更新数字字段
在上一篇 "管理沙盒(定制化)小细节1" 的随笔中,我们使用公式法在 "业务机会" 对象(单头)上建立了 "利润合计" 字段,并将它等于 & ...
- Oracle Sales Cloud:管理沙盒(定制化)小细节1——利用公式创建字段并显示在前端页面
Oracle Sales Cloud(Oracle 销售云)是一套基于Oracle云端的CRM管理系统.由于 Oracle 销售云是基于 Oracle 云环境的,它与传统的管理系统相比,显著特点之一便 ...
- Oracle Sales Cloud:报告和分析(BIEE)小细节2——利用变量和过滤器传参(例如,根据提示展示不同部门的数据)
在上一篇随笔中,我们建立了部门和子部门的双提示,并将部门和子部门做了关联.那么,本篇随笔我们重点介绍利用建好的双提示进行传参. 在操作之前,我们来看一个报告和分析的具体需求: [1] 两个有关联的提示 ...
- Oracle Sales Cloud:报告和分析(BIEE)小细节1——创建双提示并建立关联(例如,部门和子部门提示)
Oracle Sales Cloud(Oracle 销售云)是一套基于Oracle云端的客户商机管理系统,通过提供丰富的功能来帮助提高销售效率,更好地去了解客户,发现和追踪商机,为最终的销售成交 (d ...
随机推荐
- /编写一个函数,要求从给定的向量A中删除元素值在x到y之间的所有元素(向量要求各个元素之间不能有间断), 函数原型为int del(int A ,int n , int x , int y),其中n为输入向量的维数,返回值为删除元素后的维数
/** * @author:(LiberHome) * @date:Created in 2019/2/28 19:39 * @description: * @version:$ */ /* 编写一个 ...
- Android基础总结+SQlite数据库【申明:来源于网络】
Android基础总结+SQlite数据库[申明:来源于网络] 基础总结篇之一:Activity生命周期:http://blog.csdn.net/liuhe688/article/details/6 ...
- 客户续费模型 逻辑回归 分类器 AdaBoost
客户续费模型 逻辑回归 分类器 AdaBoost
- ffmpeg的编译和安装
1. 先到ffmpeg官网上下载ffmpeg源码,然后配置.编译 http://ffmpeg.org/download.html 可以如下进行配置: ./configure --prefix=/usr ...
- vue.js 之 watch 详解
接我上篇博客的例子: 在上面代码中,当我们修改 firstName 或 lastName 后,watch 监听每次修改变化的新值,然后计算输出 fullName:此时 watch 的一个缺点是,最初绑 ...
- kubectl批量删除pvc
#!/bin/bashkubectl get pvc |grep hub > tmp.txtcat tmp.txt |awk '{split($0,a," ");print ...
- Android adt-bundle 开发环境的搭建_windows
本文完全拷贝的是: https://www.jb51.net/article/87953.htm 的文章仅仅用于自己保存学习消息. Android开发环境有三种方式,分别是JDK+SDK+Ecli ...
- to_date
SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'; 会话已更改. SQL> SELECT TO_DATE(' ...
- [Android] 转-RxJava+MVP+Retrofit+Dagger2+Okhttp大杂烩
原文url: http://blog.iliyun.net/2016/11/20/%E6%A1%86%E6%9E%B6%E5%B0%81%E8%A3%85/ 这几年来android的网络请求技术层出不 ...
- JavaWeb-----ServletConfig对象和servletContext对象
1.ServletConfig ServletConfig:代表当前Servlet在web.xml中的配置信息 String getServletName() -- 获取当前Servlet在web. ...