Find a way

Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 48   Accepted Submission(s) : 15

Font: Times New Roman | Verdana | Georgia

Font Size: ← →

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

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

Sample Output

66
88
66
———————————————————————————————————————————————————
题目说两个人,他们想在某家KCF见面,要求他们到这家KCF的时间花费最少。
我们从每个kfc出发搜到每个人,选出到两个人距离和最小的就是答案
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<queue>
using namespace std;char mp[205][205];
int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
int vir[205][205];
int m,n,ans1,ans2,mn;struct node
{int x,y,cnt;
};bool cheak(int i,int j)
{if(i<1||i>m||j<1||j>n||mp[i][j]=='#')return 0;elsereturn 1;
}void bfs(int si,int sj,int yi,int yj,int mi,int mj)
{queue<node>q;node f,d;memset(vir,0,sizeof(vir));f.x=si;f.y=sj;f.cnt=0;vir[f.x][f.y]=1;q.push(f);while(!q.empty()){f=q.front();q.pop();if(ans1==-1&&ans2==-1&&2*f.cnt>=mn)return;if(ans1==-1&&ans2!=-1&&f.cnt+ans2>=mn)return;if(ans1!=-1&&ans2==-1&&f.cnt+ans1>=mn)return;if(f.x==yi&&f.y==yj&&ans1==-1){ans1=f.cnt;}if(f.x==mi&&f.y==mj&&ans2==-1){ans2=f.cnt;}if(ans1!=-1&&ans2!=-1)return;for(int i=0;i<4;i++){d.x=f.x+dir[i][0];d.y=f.y+dir[i][1];if(cheak(d.x,d.y)&&!vir[d.x][d.y]){d.cnt=f.cnt+1;vir[d.x][d.y]=1;q.push(d);}}}return ;
}int main()
{int yi,yj,mi,mj,ans;while(scanf("%d%d",&m,&n)!=EOF){for(int i=1;i<=m;i++)for(int j=1;j<=n;j++){cin>>mp[i][j];if(mp[i][j]=='Y'){yi=i;yj=j;}if(mp[i][j]=='M'){mi=i;mj=j;}}mn=100000;for(int i=1;i<=m;i++)for(int j=1;j<=n;j++){if(mp[i][j]=='@'){ans1=-1;ans2=-1;bfs(i,j,yi,yj,mi,mj);if(ans1!=-1&&ans2!=-1){ans=ans1+ans2;if(ans<mn)mn=ans;}}}printf("%d\n",mn*11);}return 0;
}

Hdu2612 Find a way相关推荐

  1. HDU2612 Find a Way BFS

    题意: yifenfei和merceki要去KFC聚会,给出一个地方的地图,n*m,有若干个个KFC,然后他们每走一步需要11分钟(注意:这里时间不能重叠的,比如yi走了一步,me也是走了一步,则一共 ...

  2. HDU-2612 Find a way

    Problem Description Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. L ...

  3. HDU2612(BFS算法)

    Problem Descrption Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. Le ...

  4. hdu2612——Find a way

    Problem Description Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. L ...

  5. Find a way hdu2612

    Find a way Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Su ...

  6. 22.11.27补卡 HDU-2612 bfs

    这题dfs没法写, 因为dfs没法处理最优解的情况 分别记录每个人走每一个kfc的最短路径 然后一个双重循环搜最小值就好了 初始化记得初始化为最大值, 不然有可能影响最min取值 ps: 这题我用st ...

  7. 【HDU - 2612】Find a way(bfs)

    -->Find a way 直接上Chinese  Descriptions: hsj和lsh最近迷上了pokemon go的游戏.在双十一大物期中考试来临之前,他们想抓一只稀有土拨鼠来攒攒人品 ...

  8. ACM训练计划建议(转)

    ACM训练计划建议 From:freecode#  Date:2015/5/20 前言: 老师要我们整理一份训练计划给下一届的学弟学妹们,整理出来了,费了不少笔墨,就也将它放到博客园上供大家参考. 菜 ...

  9. ACM的分类训练题集

    1.数论 大概有素数测试(筛法),扩展欧几里得算法,同余模运算,高斯消元,中国剩余定理,莫比乌斯反演等等. 我不擅长这方面(数学烂,还好后期团队里有两位数学大神),不发表评论. 推荐题目: 同余模运算 ...

最新文章

  1. 五子棋html游戏代码与算法介绍
  2. linux的磁盘文件系统格式怎么看,linux如何下查看磁盘分区的文件系统格式?
  3. Report_报表中Ref Cursor数据源的概念和用法(案例)
  4. 复习笔记--计算机网络
  5. Mysql慢查询深入剖析_《深入精通Mysql(六)》系列之如何通过慢查询日志进行SQL分析和优化...
  6. C# 效率也不是很差嘛
  7. go oracle编程,go基础编程(一):第一个go程序-hello word
  8. 【python】 time模块和datetime模块详解 【转】
  9. 【今日CS 视觉论文速览】Mon, 14 Jan 2019
  10. MTK 驱动开发(37)--如何确定阻止进入suspend的原因
  11. php 百度收录api_帝国cms百度普通收录资源提交API推送php实例方法
  12. 手摸手,一起整理前端小小小知识
  13. 活动报名 | 苏州工业园区领军人才项目申报宣讲对接会
  14. HDU5686 Problem B【递推】
  15. DPM2010 粒度恢复个人用户邮箱
  16. android widget 开发实例 : 桌面便签程序的实现具体解释和源代码 (上)
  17. 代码开源为黑客敞开了大门
  18. adams建立一绳索不带滑轮_Adams绳索实验
  19. html表格自动分列,html页面中表单怎么用div分列布局
  20. 使用PHP从Access数据库中提取对象,第2部分

热门文章

  1. sed ‘/^123=/!d;s/.*=//‘ a.txt 详细讲解
  2. JFrame类的常用方法
  3. 二次同余方程(二次剩余)
  4. 构建和谐的亲子关系公益讲座--如何和“熊孩子”对话
  5. 【Linux】关于三角函数、反三角函数在VC和linux gcc下的编译
  6. 递归形成树形结构,去除树结构里面的空children数组
  7. 金仓数据库KingbaseES数据类型和oracle数据类型的映射表
  8. Vue源码解读(六):update和patch
  9. 关于android老年人关怀系统,基于Android环境的老人社交应用平台设计研究
  10. Python7.3 练一练