https://www.bnuoj.com/v3/contest_show.php?cid=9154#problem/I

【题意】

  • 给定一个n*m的迷宫,A的多个小伙伴R要去营救A,问需要时间最少的小伙伴是多长时间
  • 遇到'.'需要1分钟,遇到'x'需要两分钟,遇到'#'不能走

【思路】

  • 这道题的关键是遇到'.'和遇到'x'需要的时间不一样,所以不能用平常的BFS找最短路
  • vis数组不再是true和false两个状态来标记是否已经走过,而是记录最小步数的值
  • 不再是vis是false就加入队列,而是vis小于最小步数加入队列
  • 因为有多个R营救一个A,所以是以A为起点BFS

【Accepted】

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
#include<queue> using namespace std; int n,m;
const int maxn=2e2+;
const int inf=0x3f3f3f3f;
char str[maxn][maxn];
//bool vis[maxn][maxn];
int vis[maxn][maxn];
struct node
{
int x;
int y;
int step;
node(){}
node(int _x,int _y,int _s):x(_x),y(_y),step(_s){}
friend bool operator<(node nd1,node nd2)
{
return nd2.step<nd1.step;
}
}nd[maxn];
int dir[][]={{,},{-,},{,},{,-}};
bool check(int x,int y)
{
if(str[x][y]=='#') return false;
if(x<||x>=n||y<||y>=m) return false;
return true;
}
int BFS(int x,int y)
{
priority_queue<node> Q;
Q.push(node(x,y,));
vis[x][y]=;
while(!Q.empty())
{
node q=Q.top();
Q.pop();
if(str[q.x][q.y]=='r') return q.step;
for(int i=;i<;i++)
{
int x=q.x+dir[i][];
int y=q.y+dir[i][];
if(check(x,y))
{
int s;
if(str[x][y]=='x') s=q.step+;
else s=q.step+;
if(s<vis[x][y])
{
vis[x][y]=s;
Q.push(node(x,y,s));
}
}
}
}
return -;
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
memset(vis,inf,sizeof(vis));
int x,y;
for(int i=;i<n;i++)
{
scanf("%s",str[i]);
for(int k=;k<m;k++)
{
if(str[i][k]=='a')
{
x=i;
y=k;
}
}
}
int ans=BFS(x,y);
if(ans==-)
{
puts("Poor ANGEL has to stay in the prison all his life.");
}
else
{
printf("%d\n",ans);
}
}
return ;
}

BFS+优先级队列

【BFS+优先级队列】Rescue的更多相关文章

  1. POJ 2227 The Wedding Juicer (优先级队列+bfs+dfs)

    思路描述来自:http://hi.baidu.com/perfectcai_/item/701f2efa460cedcb0dd1c820也可以参考黑书P89的积水. 题意:Farmer John有一个 ...

  2. 算法与数据结构基础 - 堆(Heap)和优先级队列(Priority queue)

    堆基础 堆(Heap)是具有这样性质的数据结构:1/完全二叉树 2/所有节点的值大于等于(或小于等于)子节点的值: 图片来源:这里 堆可以用数组存储,插入.删除会触发节点shift_down.shif ...

  3. 体验Rabbitmq强大的【优先级队列】之轻松面对现实业务场景

    说到队列的话,大家一定不会陌生,但是扯到优先级队列的话,还是有一部分同学是不清楚的,可能是不知道怎么去实现吧,其实呢,,,这东西已 经烂大街了...很简单,用“堆”去实现的,在我们系统中有一个订单催付 ...

  4. Java中的队列Queue,优先级队列PriorityQueue

    队列Queue 在java5中新增加了java.util.Queue接口,用以支持队列的常见操作.该接口扩展了java.util.Collection接口. Queue使用时要尽量避免Collecti ...

  5. 如何基于RabbitMQ实现优先级队列

    概述 由于种种原因,RabbitMQ到目前为止,官方还没有实现优先级队列,只实现了Consumer的优先级处理. 但是,迫于种种原因,应用层面上又需要优先级队列,因此需求来了:如何为RabbitMQ加 ...

  6. ACM/ICPC 之 优先级队列+设置IO缓存区(TSH OJ-Schedule(任务调度))

    一个裸的优先级队列(最大堆)题,但也有其他普通队列的做法.这道题我做了两天,结果发现是输入输出太过频繁,一直只能A掉55%的数据,其他都是TLE,如果将输入输出的数据放入缓存区,然后满区输出,可以将I ...

  7. java中PriorityQueue优先级队列使用方法

    优先级队列是不同于先进先出队列的另一种队列.每次从队列中取出的是具有最高优先权的元素. PriorityQueue是从JDK1.5开始提供的新的数据结构接口. 如果不提供Comparator的话,优先 ...

  8. stl的优先级队列

    #include <iostream> #include <vector> #include <queue> using namespace std; class ...

  9. 【python cookbook】【数据结构与算法】5.实现优先级队列

    问题:要实现一个队列,它能够以给定的优先级对元素排序,且每次pop操作时都会返回优先级最高的那个元素: 解决方案:采用heapq模块实现一个简单的优先级队列 # example.py # # Exam ...

随机推荐

  1. PropTypes 和组件参数验证

    我们来了到了一个非常尴尬的章节,很多初学的朋友可能对这一章的知识点不屑一顾,觉得用不用对程序功能也没什么影响.但其实这一章节的知识在你构建多人协作.大型的应用程序的时候也是非常重要的,不可忽视. 都说 ...

  2. 雪碧图(background-position)、overflow、title中的小图标、光标、rgb 和opacity 与rgba

    一.background-position     雪碧图 我们的html和css中有三个属性可以向服务器发送请求:src   url    href 1.我们为什么使用雪碧图? 因为我们使用雪碧图之 ...

  3. 开始bootstrap的学习

    终于过完双十一,服务器顶住了压力,不知道为啥,突然的轻松,反而感觉有点无所适从,好久没写博客了,竟然发现还有人回我,很是开心,问题都是关于阿里云的,阿里云的吭确实多,其实关键在于,官方文档还是少,出了 ...

  4. iOS 应用程序内部国际化,不跟随系统语言

    前言:网络上关于iOS国际化的文章很多,但基本上都是基于跟随系统语言的国际化,笔者就不赘述了-0 – 今天要讲的是不跟随系统的切换语言版本方案,即程序内部的切换语言版本方案. 一.总则: 应用内部语言 ...

  5. Android如何用阿里云的API进行身份证识别

    准备工作:在libs下添加 alicloud-Android-apigateway-sdk-1.0.1.jar,commons-codec-1.10-1.jar 在build.gradle添加  co ...

  6. NIO入门之轻松读取大文件

    NIO入门之轻松读取大文件 今天同事碰到了一个问题,从游戏服务器下载下来的输出log有一个多G大.用记事本打不开,EditPlus也打不开,都提示文件太大.用word也打不开,提示文件大于512M.打 ...

  7. File.Exists 文件不存在 Or FileNotFoundException

    标题警告,本文仅限走投无路,最终可能的一个问题导致. 最开始出现在找不到文件,测试发现: 看起来毫无毛病 而后各种测试: 注意看,第一行跟第三行一模一样 发现[@"‪‪‪]这两个字符有毒,如 ...

  8. http接口调用,传递json格式带双引号问题

    springmvc 配置好会自动转换json格式,只要配置他转格式之前,在转次String类型就好

  9. DAX:New and returning customers

    The New and Returning Customers pattern dynamically calculates the number of customers with certain ...

  10. nginx 新手入门

    Nginx 是一个高性能的http 和反向代理服务器,也是一个代理服务器. Nginx比Apache 更加轻量级,占用的资源少,抗并发,二apache是阻塞型的,在高并发下,nginx更占优势. 我们 ...