HDU 2612 Find a way(找条路)

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

 

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.
经过一年在杭州的学习,yifenfei终于回到了家乡宁波。离开宁波一年,yifenfei有许多人需要拜访。特别是好基友Merceki。
Yifenfei家住郊区,然而Merceki则住在市中心。因此yifenfei打算约Merceki在KFC面基,不过他们要选一家到达所花费的时间和最短的店。
现在给你一张宁波地图,yifenfei和Merceki可以花费11分钟分别进行上下左右移动。

CN

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
输入有多组测试用例。
每组用例开头为两个整数n,m。(<=n,m<=)
随后n行,每行有m个字符。
‘Y’表示yifenfei 的初始位置。
‘M’表示Merceki 的初始位置。
‘#’障碍物
‘.’道路
‘@’ KCF

CN

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.
对于每个测试用例,输出yifenfei 与Merceki 到达某个KFC最少的二者时间和。至少存在一个KFC让他们相遇。

CN

Sample Input - 输入样例

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

Sample Output - 输出样例

66
88
66

题解
  BFS套路,扫两遍出结果。
  需要注意无法达到的KFC,可以通过处理最大值来规避。

代码 C++

 #include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#define INF 0x01010101
struct Point{
int y, x;
}st1, st2, kfc[], now, nxt;
std::queue<Point> q;
int data[][], iK, len[], fx[] = { , , -, , , , , - };
char map[][];
void BFS(char c, char b){
int i, tmp;
while (!q.empty()){
now = q.front(); q.pop(); tmp = data[now.y][now.x] + ;
for (i = ; i < ; i += ){
nxt.y = now.y + fx[i]; nxt.x = now.x + fx[i + ];
if (map[nxt.y][nxt.x] == c){
data[nxt.y][nxt.x] = tmp; map[nxt.y][nxt.x] = b;
q.push(nxt);
}
}
}
for (i = ; i < iK; ++i) len[i] += data[kfc[i].y][kfc[i].x];
}
int main(){
int n, m, i, j, opt;
while (~scanf("%d%d ", &n, &m)){
memset(map, '#', sizeof map); memset(len, , sizeof len);
iK = ; opt = INF;
for (i = ; i <= n; ++i) gets(&map[i][]);
for (i = ; i <= n; ++i) for (j = ; j <= m; ++j){
switch (map[i][j]){
case 'Y': st1 = { i, j }; map[i][j] = '.'; break;
case 'M': st2 = { i, j }; map[i][j] = '.'; break;
case '@': kfc[iK++] = { i, j }; map[i][j] = '.';
}
} memset(data, INF, sizeof data);
q.push(st1); data[st1.y][st1.x] = ; map[st1.y][st1.x] = '*';
BFS('.', '*'); memset(data, INF, sizeof data);
q.push(st2); data[st2.y][st2.x] = ; map[st2.y][st2.x] = 'X';
BFS('*', 'X'); for (i = ; i < iK; ++i) opt = std::min(opt, len[i]);
printf("%d\n", opt * );
}
return ;
}

HDU 2612 Find a way(找条路)的更多相关文章

  1. [HDU 1317]XYZZY[SPFA变形][最长路]

    题意: 一个图, 点权代表走到该点可获得的能量值. 可正可负. 一个人从1 号出发,带有100点能量. 问是否有一种方案可使人在能量值>0的时候走到n. 思路: 这个题首先要注意点权. 其实就是 ...

  2. [项目实施失败讨论Case] “凭心而论,在这家公司很敬业的工作了3年多,老板最后给我下的评语,大家都看看吧,千万别和我走同一条路!”(摘自csdn)

    [Case] “凭心而论,在这家公司很敬业的工作了3年多,老板最后给我下的评语,大家都看看吧,千万别和我走同一条路!”(摘自csdn) 原文:http://community.csdn.net/Exp ...

  3. HDU 3032 multi-sg 打表找规律

    普通NIM规则加上一条可以分解为两堆,标准的Multi-SG游戏 一般Multi-SG就是根据拓扑图计算SG函数,这题打表后还能发现规律 sg(1)=1 sg(2)=2 sg(3)=mex{0,1,2 ...

  4. 前端这条路怎么走,作为一名后端er,说说我的见解

    近期都游荡在各大群里看大家的讨论,经常看到关于程序员生涯的一些讨论,颇有感触,最近的国庆的确过得有些堕落,都没怎么更新,仔细相信还是应该分享点经验给大家的!想必大家都经历过面试,这是进入一家公司的必要 ...

  5. IT这条路,适合什么人走。

    今天 ,到图书馆Study,呼,不知道为撒,看到那么多新书,那么多新技术(也不能说是新技术,就是自己没有学习过的技术),特别兴奋,学习的疲劳顿时间就没了,感觉什么都想学,都想据为己有,但是...... ...

  6. 发发牢骚,觉得走c#这条路,不该太浮躁。

    发发牢骚,觉得走c#这条路,不该太浮躁.校园招聘结束了,腾讯,华为,百度,完美时空,网易,阿里,让我觉得.NET很受歧视.清一色的C/C++,JAVA,只有网易有一点.Net的,但是都是非核心的运维工 ...

  7. HDU.2612 Find a way (BFS)

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

  8. 为什么我会选择走 Java 这条路?

    阅读本文大概需要 2.8 分钟.   作者:黄小斜 文章来源:微信公众号[程序员江湖] 最近有一些小伙伴问我,为什么当初选择走Java这条路,为什么不做C++.前端之类的方向呢,另外还有一些声音:研究 ...

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

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

随机推荐

  1. python 将字节写入文本文件

    想在文本模式打开的文件中写入原始的字节数据 将字节数据直接写入文件的缓冲区即可 >>> import sys >>> sys.stdout.write(b'Hell ...

  2. 分布式系统ID生成方案

    自增ID 不错,可以限度抑制ID的大小.但需要有一个中心化的节点作为解决原子性问题.可以选用Redis,MySQL,Zookeeper.成本有点高. UUID 分布式,而且唯一!缺点是生产的ID太长. ...

  3. GUI常用对象的属性

    %常用对象的属性 %.figure %hf=figure; %get(hf); %改变颜色 set Color %set(hf,'Color','w'); %去掉默认的菜单 Menubar %set( ...

  4. P1216 数字金字塔

    P1216  数字金字塔 我们可以用 f [ i ] [ j ] 表示从(1,1)出发,到达(i,j)的最大权值和. (i , j)可以由(i - 1 , j)或者(i - 1 , j - 1)转化来 ...

  5. node.js读取到的文件列表

    var fs = require('fs'); var path = require('path'); //解析需要遍历的文件夹,我这以E盘根目录为例 var filePath = path.reso ...

  6. linux grep 正则表达式

    grep正则表达式元字符集: ^ 锚定行的开始 如:'^grep'匹配所有以grep开头的行. $ 锚定行的结束 如:'grep$'匹配所有以grep结尾的行. . 匹配一个非换行符的字符 如:'gr ...

  7. WinCHM 制作开发知识库,So easy!!!

    开发过程中可能需要一些团队需要相互参照的东西,如前后台开发中的接口定义,团队开发规范,公用的类库,开发FAQ等 ,可以考虑用WinCHM这种工具制作开发知识库,然后发布至一Web服务器上,这样开发人员 ...

  8. excel 方框打钩

    将光标定位于需要打钩的地方,选择[插入]→[符号]→[其他符号] 在弹出的符号栏里,字体一定要改成[Windings2] 然后在符号栏便可以找到现成的打钩样式,点击插入,再关闭即可 提示:如果需要打叉 ...

  9. mybatis的dao的mapper写法

    ## MyBatis的Dao编写[mapper代理方式实现] step1: 写一个接口,并写抽象方法 package com.sjl.mapper; import com.sjl.model.User ...

  10. php打乱数组二维数组、多维数组

    //这个是针对二维数组的!下面针对多维数组的乱序方法<?php function shuffle_assoc($list) { if (!is_array($list)) return $lis ...