主题链接:Find a Way

题目不难,前几天做,当时准备写双向BFS的,后来处理细节上出了点问题,赶上点事搁置了。今天晚上重写的,没用双向,用了两次BFS搜索,和双向BFS 道理差点儿相同。仅仅是这题有个小坑,须要注意

1.Y不能经过M。M不能经过Y。也就是说有Y和M的格子,能够默觉得是墙

2.必须是Y和M都能到达的KFC才行,仅仅是当中一个到达不行

比例如以下列数据;答案既不是22 也不是 88 而是110,左下角的KFC满座条件

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

小小的坑我了一下。

。。

感谢昵称: zstu_JayYe杰 不是看了他在Discuss板里的留言。预计我也想不到

31MS 852K

代码非常渣,哗哗。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <queue>
const int N = 1e6;
const int M = 220;
using namespace std;
char mapp[M][M];
bool vis1[M][M],vis2[M][M];
int dis1[M][M],dis2[M][M],n,m,l;
struct node
{
int x,y,a;
node()
{ x = 0; y = 0;a = 0; }
};
struct noDe{
int x,y;
}kfc[40010];
int mv[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
void BFS(int x,int y,bool visit[M][M],int ans[M][M])
{
node f,t;
queue<node>q;
visit[x][y]=true;
f.a = 0;
f.x=x;
f.y=y;
q.push(f);
while(!q.empty())
{
t = q.front();
q.pop();
if(mapp[t.x][t.y]=='@')
ans[t.x][t.y] = t.a;
for(int i=0;i<4;i++)
{
f.x=t.x+mv[i][0];
f.y=t.y+mv[i][1];
if(!visit[f.x][f.y]&&0<=f.x&&f.x<n&&0<=f.y&&f.y<m&&mapp[f.x][f.y]!='#')
{
f.a = t.a + 1;
visit[f.x][f.y]=true;
q.push(f);
}
}
}
}
int main()
{
int sx,sy,ex,ey;
int minn;
while(~scanf("%d%d%*c",&n,&m))
{
l = 0;
for(int i=0;i<n;i++)
{
scanf("%s",mapp[i]);
for(int j=0;j<m;j++)
{
if(mapp[i][j]=='Y')
{
sx=i; sy=j;
mapp[i][j]='#';
}
else if(mapp[i][j]=='M')
{
mapp[i][j]='#';
ex=i; ey=j;
}
else if(mapp[i][j]=='@')
{
kfc[l].x = i; kfc[l++].y = j;
}
}
}
memset(vis1,0,sizeof(vis1));
memset(dis1,0,sizeof(dis1));
BFS(sx,sy,vis1,dis1);
memset(vis2,0,sizeof(vis2));
memset(dis2,0,sizeof(dis2));
BFS(ex,ey,vis2,dis2);
minn=N;
for(int i = 0;i<l;i++)
{
if(minn > dis1[kfc[i].x][kfc[i].y] + dis2[kfc[i].x][kfc[i].y])
if(dis1[kfc[i].x][kfc[i].y]!=0&&dis2[kfc[i].x][kfc[i].y]!=0)
minn = dis1[kfc[i].x][kfc[i].y] + dis2[kfc[i].x][kfc[i].y];
}
printf("%d\n",minn*11);
}
return 0;
}

版权声明:本文博主原创文章,博客,未经同意不得转载。

HDU 2612 -Find a way (注重细节BFS)的更多相关文章

  1. 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 ...

  2. HDU 2612 find a way 【双BFS】

    <题目链接> 题目大意:两个人分别从地图中的Y 和 M出发,要共同在 @ 处会面(@不止有一处),问这两个人所走距离和的最小值是多少. 解题分析: 就是对这两个点分别进行一次BFS,求出它 ...

  3. hdu 2612:Find a way(经典BFS广搜题)

    Find a way Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  4. HDU - 2612 Find a way 双起点bfs(路径可重叠:两个队列分别跑)

    Find a way Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  5. 题解报告:hdu 2612 Find a way(双bfs)

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

  6. HDU.2612 Find a way (BFS)

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

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

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

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

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

  9. HDU 1312 Red and Black --- 入门搜索 BFS解法

    HDU 1312 题目大意: 一个地图里面有三种元素,分别为"@",".","#",其中@为人的起始位置,"#"可以想象 ...

随机推荐

  1. Simple Automated Backups for MongoDB Replica Sets

    There are a bunch of different methods you can use to back up your MongoDB data, but if you want to ...

  2. dev XtraMessageBox按钮显示中文

    dev的XtraMessageBox控件使用起来很美观,但默认显示确定的是英文,如下图: 通过下面代码可使“OK”显示为中文:首先创建一个继承自Localizer的类: using DevExpres ...

  3. UML 简单的总结

    上某一个地方,总有个记忆挥不散,每一个深夜某一个地方,总有着最深的思量- 都说岁月无情人有情,记忆easy催人老,可有时候反倒觉着人比岁月更无情.岁月留下了我们成长的印记,但是有时候以前认为会相伴永远 ...

  4. Orleans:NET的Actor模型

    .NET的Actor模型:Orleans   Orleans是微软推出的类似Scala Akka的Actor模型,Orleans是一个建立在.NET之上的,设计的目标是为了方便程序员开发需要大规模扩展 ...

  5. 华为-on演习--身高找到最好的二人

    称号: 从5个人选择2作为个人礼仪器.中的每个个体的身高的范围160-190,要求2各高度差值至少(假设差异值同样的事情,他们中最高的选择),输出的两个人的身高升序. Smple input:161  ...

  6. 部署Redis主-从

    Redis主-从部署实践 0. 前言 这篇文章简要介绍Redis的主从部署,实现了一主二从,使用两个哨兵监控,以实现简单的HA,其中从库作为备机. 1. 部署 这里有三台服务器,其中239主机上的Re ...

  7. HDU 1054 Strategic Game(树形DP)

    Problem Description Bob enjoys playing computer games, especially strategic games, but sometimes he ...

  8. JavaScipt面向对象编程----闭包

    在javascript中闭包是一个非常不好理解的概念,可是确实一个不可逃避的东西,那么今天我们就来一起学习一下闭包. 什么是闭包? 闭包:官方"的解释是:闭包是一个拥有很多变量和绑定了这些变 ...

  9. 使用WindowManager添加您自己的自定义视图

    在写手机卫士的时候,用户拨打|接听电话须要显示号码归属地,然后出现了一些异常,在此留下记号.希望对麻友们有帮助: BUG教程 在使用 view = View.inflate(this, R.layou ...

  10. 第十二章——SQLServer统计信息(1)——创建和更新统计信息

    原文:第十二章--SQLServer统计信息(1)--创建和更新统计信息 简介: 查询的统计信息: 目前为止,已经介绍了选择索引.维护索引.如果有合适的索引并实时更新统计信息,那么优化器会选择有用的索 ...