题目

/******************以下思路来自百度菜鸟的程序人生*********************/

  bfs即可,可能有多个’r’,而’a’只有一个,从’a’开始搜,找到的第一个’r’即为所求

  需要注意的是这题宽搜时存在障碍物,遇到’x’点是,时间+2,如果用普通的队列就

并不能保证每次出队的是时间最小的元素,所以要用优先队列,第一次用优先队列,还不熟练哇

  优先队列(priority_queue)的基本操作:

  empty(); 队列为空返回1

  pop();   出队

  push();  入队

  top();   返回队列中优先级最高的元素

  size();  返回队列中元素的个数

/**************************************************************/

修改了学妹的代码,增加了优先队列,成功AC~

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
char map[][];
bool visit[][];
int xx[]={,-,,};
int yy[]={,,,-};
int n,m,x,y;
struct node
{
int x,y;
int time;
friend bool operator < (const node &a,const node &b)
{
return a.time>b.time;
}
};
void bfs(int &min)
{
priority_queue<node>q;
int i;
node step,temp;
step.x=x;
step.y=y;
step.time=;
visit[x][y]=true;
q.push(step);
while(!q.empty())
{
step=q.top();
q.pop();
if(map[step.x][step.y]=='r')
{
min=step.time;
return ;
}
else if(map[step.x][step.y]!='r')
{
for(i=;i<;i++)
{ if(map[step.x+xx[i]][step.y+yy[i]]!='#' && !visit[step.x+xx[i]][step.y+yy[i]])
{
if(map[step.x+xx[i]][step.y+yy[i]]=='x')
{
temp.x=step.x+xx[i];
temp.y=step.y+yy[i]; temp.time=step.time+;
}
else
{
temp.x=step.x+xx[i];
temp.y=step.y+yy[i];
temp.time=step.time+;
}
visit[temp.x][temp.y]=true;
q.push(temp);
}
}
}
}
}
int main()
{
while(~scanf("%d %d",&n,&m))
{
int i,j;
int min=;
memset(visit,false,sizeof(visit));
for(i=;i<=n+;++i)
map[i][]=map[i][m+]='#';
for(i=;i<=m+;++i)
map[][i]=map[n+][i]='#';
for(i=;i<=n;++i)
{
for(j=;j<=m;j++)
{
cin>>map[i][j];
if(map[i][j]=='a')
{
x=i;
y=j;
}
}
}
bfs(min);
if(min<)
printf("%d\n",min);
else
printf("Poor ANGEL has to stay in the prison all his life.\n");
}
return ;
}

hdu 1242 Rescue(BFS,优先队列,基础)的更多相关文章

  1. HDU 1242 Rescue(BFS+优先队列)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1242 题目描述: Problem Description Angel was caught by t ...

  2. HDU 1242 Rescue(优先队列)

    题目来源: http://acm.hdu.edu.cn/showproblem.php?pid=1242 题目描述: Problem Description   Angel was caught by ...

  3. HDU 1242 Rescue(BFS),ZOJ 1649

    题目链接 ZOJ链接 Problem Description Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The ...

  4. hdu 1242 Rescue (BFS)

    Rescue Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  5. HDU 1242 rescue (优先队列模板题)

    Rescue Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  6. HDU 1242——Rescue(优先队列)

    题意: 一个天使a被关在迷宫里,她的很多小伙伴r打算去救她.求小伙伴就到她须要的最小时间.在迷宫里有守卫.打败守卫须要一个单位时间.假设碰到守卫必须要杀死他 思路: 天使仅仅有一个,她的小伙伴有非常多 ...

  7. HDU 1242 -Rescue (双向BFS)&amp;&amp;( BFS+优先队列)

    题目链接:Rescue 进度落下的太多了,哎╮(╯▽╰)╭,渣渣我总是埋怨进度比别人慢...为什么不试着改变一下捏.... 開始以为是水题,想敲一下练手的,后来发现并非一个简单的搜索题,BFS做肯定出 ...

  8. hdu 1242 Rescue

    题目链接:hdu 1242 这题也是迷宫类搜索,题意说的是 'a' 表示被拯救的人,'r' 表示搜救者(注意可能有多个),'.' 表示道路(耗费一单位时间通过),'#' 表示墙壁,'x' 代表警卫(耗 ...

  9. hdu - 1242 Rescue && hdu - 2425 Hiking Trip (优先队列+bfs)

    http://acm.hdu.edu.cn/showproblem.php?pid=1242 感觉题目没有表述清楚,angel的朋友应该不一定只有一个,那么正解就是a去搜索r,再用普通的bfs就能过了 ...

随机推荐

  1. UILabel常用属性

    [super viewDidLoad]; // 实例化UILabel并指定其边框 UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0 ...

  2. .NET4.5可以给所有线程设置默认的Culture了

    How to set CurrentCulture for all threads in a domain in .NET 4.5 Before .NET 4.5 if we wanted to se ...

  3. rest介绍

    REST介绍 描述 rest即表述性状态传递(英文:Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种软 ...

  4. 《DNS服务缓存的建立》RHEL6

    安装dns软件包: 启动dns服务器 配置本地服务器dns域名解析: 查看dns的服务的端口是否打开: 解析百度测试: 安装dns缓存包: 再次访问解析百度

  5. FIR滤波器(1)- 基础知识

    FIR滤波器广泛应用于数字信号处理中,主要功能就是将不感兴趣的信号滤除,留下有用信号.FIR滤波器是全零点结构,系统永远稳定:并且具有线性相位的特征,在有效频率范围内所有信号相位上不失真.在无线通信收 ...

  6. 设置datagridview中button按钮的背景颜色

    问题:DataGridViewButtonColumn()在datagridview中创建按钮列,如何设置按钮的背景颜色(不是单元格的背景颜色). 回答:可以在dataGridView1_CellPa ...

  7. 如何查看 Apache 的版本

    查看 Apache 服务器版本的命令行为: httpd -v 或者 apachectl -v 例如:用 Xshell 连接到服务器后,输入:httpd -v 或者:apachectl -v 返回: S ...

  8. linux前景到底怎么样啊?

    我就不长篇大论,举四个例子你看看. 1.目下最热最潮最流行的云计算技术的背后是虚拟化和网格技术,而虚拟化和网格技术基本是Linux的天下,目前虚拟化的三大家:Vmware,Xen,Hyper-V中,市 ...

  9. python:执行一个命令行N次

    经常希望可以执行一个命令行N次...windows下没有现成的工具(有?推荐给我!) 用python写一个... #!/usr/bin/evn python #coding: utf-8 " ...

  10. javascript 数组排序之 sort()

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8& ...