HDU 2612 -Find a way (注重细节BFS)
主题链接: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)的更多相关文章
- 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 【双BFS】
<题目链接> 题目大意:两个人分别从地图中的Y 和 M出发,要共同在 @ 处会面(@不止有一处),问这两个人所走距离和的最小值是多少. 解题分析: 就是对这两个点分别进行一次BFS,求出它 ...
- hdu 2612:Find a way(经典BFS广搜题)
Find a way Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- HDU - 2612 Find a way 双起点bfs(路径可重叠:两个队列分别跑)
Find a way Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- 题解报告:hdu 2612 Find a way(双bfs)
Problem Description Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. L ...
- 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(找条路)
HDU 2612 Find a way(找条路) 00 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem ...
- HDU 1312 Red and Black --- 入门搜索 BFS解法
HDU 1312 题目大意: 一个地图里面有三种元素,分别为"@",".","#",其中@为人的起始位置,"#"可以想象 ...
随机推荐
- 公钥\私人 ssh避password登陆
相关概念以前见过,决不要注意,使用公共密钥管理之前,腾讯云主机的备案机,非常头发的感觉,查了一下相关资料,这里总结下: 字符a:192.168.7.188 (ubuntu) 字符b:192.168.7 ...
- [LeetCode141]Linked List Cycle
题目:Given a linked list, determine if it has a cycle in it. 判断一个链表是否有环 代码: /** * Definition for singl ...
- PHP关联数组和哈希表(hash table) 未指定
PHP有数据的一个非常重要的一类,就是关联数组.又称为哈希表(hash table),是一种很好用的数据结构. 在程序中.我们可能会遇到须要消重的问题,举一个最简单的模型: 有一份username列表 ...
- 【Android进阶】快捷图标的创建与移除
注释已经说得很清楚了,如果有疑问,请留言 /** * 添加桌面快捷方式 * * @param view */ public void click1(View view) { if (isExit()) ...
- 作为一个新人,如何学习嵌入式Linux?
作为一个新人.如何学习嵌入式Linux?我一直在问太多次,特写文章来回答这个问题. 在学习嵌入式Linux之前.肯定要有C语言基础.汇编基础有没有无所谓(就那么几条汇编指令,用到了一看就会).C语言要 ...
- 从Java到C++——从union到VARIANT与CComVariant的深层剖析
我第一次用VARIANT和CComVariant的时候全然不明确它是怎么回事,为它什么数据类型都能够存放.什么数据都能够被能够初始化?里面究竟是怎么实现的?感觉又奇妙又迷惑!我们在上一节中讲了unio ...
- 在 Ubuntu 12.04 上安装 GitLab7.x
安装环境: 操作系统: Ubuntu 12.4 LTS 英文 数据库: postgresql webserver: nginx 能够说到7.x的时候,GitLab的文档已经相当完好 ...
- 学习vi和vim编辑(3):一个简单的文本编辑器(2)
然后文章,继续评论vi编辑简单的文本编辑命令. 本文主要是删除的文字.复制,运动命令. 删除文本: 正如上一篇文章中讲过的,对于删除命令("d")也具有"(command ...
- 对话(VC_Win32)
资源叙述性说明对话框来定义表 格公式: 对话框名称 DIALOG[负载特性] X,Y,Width,Height[设置选项] { 对话框控件定义; } 说明: 对话框名称: 标识对话框资源,可为一个字符 ...
- 泛泰A860(高通公司8064 cpu 1080p) 拂4.4中国民营recovery TWRP2.7.1.2文本(通过刷第三版)
专业第三方开发团队 VegaDevTeam (本team 由 syhost suky zhaochengw(z大) xuefy(大星星) tenfar(R大师) loogeo crazyi(天下无雪 ...