首页 > 其他分享 >2849: 【广度优先】【优先队列】游戏装备

2849: 【广度优先】【优先队列】游戏装备

时间:2024-04-10 09:01:13浏览次数:25  
标签:优先 副本 love 角色 2849 队列 血量 int first

 题目描述

小未在玩一款武侠游戏,游戏里PK不仅要有高超的操作和智慧,还要有很牛的装备。现在他进入了一个副本,副本里面有极品15星的装备宝箱,但是从副本入口到宝箱有很多条路,当然不可能轻轻松松的拿到极品装备。一路上会随机刷出各种攻击力很强的怪物。它会攻击小未的角色,当然也必须打败它才能通过,这个过程角色的血量HP会减少(血量不会回复),预先给你副本的地图,请你帮小未计算一下能不能拿到极品装备。

注意:刚进入副本时角色是满血的,中途没有任何回血的措施,在过程中血量hp必需>0,不然副本结束(即拿不到极品装备)。

输入

输入一共有 n+k+2 行,
第一行依次为 n, m, k, H,分别表示副本行列数,怪物数,角色的满血血量。其中 n≤100,m≤100, k≤10, H≤200。
第二行四个整数,表示副本入口坐标和宝箱所在坐标。数据保证起点和终点所在的格子都是 空的。
接下来 n 行,每行一个长度为 m 的字符串,表示副本地图。‘.’表示可走,#表 示为不可走,A-Z 的字符表示怪物种类
接下来 k 行
接下来的第 1 行,一个数表示 A 怪物会使角色扣多少血;
接下来的第 2 行,一个数表示 B 怪物会使角色扣多少血;
……
接下来的第 k 行...
以此类推,扣的血量小于等于 200。

输出

输出共一行,表示到达终点最后最多剩下多少血。如果不能拿到装备,则输出game over

样例输入

5 5 2 15
1 1 5 4
....A
####.
.....
###B#
.....
9
3

样例输出

3

Code:

#include<bits/stdc++.h>
using namespace std;
char mp[205][205];
int n,m,k,h;
int ax,ay,bx,by;
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
int a[250];
struct love{
    int x,y;
    int xueliang;
    friend bool operator < (love a,love b){
        return a.xueliang<b.xueliang;
    }
};
int bfs(int nx,int ny,int step){
    priority_queue <love> q;
    love first,next;
    first.x=nx;
    first.y=ny;
    first.xueliang=step;
    q.push(first);
    while(!q.empty()){
        first=q.top();
        q.pop();
        for(int i=0;i<4;i++){
            int fx=first.x+dx[i];
            int fy=first.y+dy[i];
            if(fx==bx&&fy==by){
                return first.xueliang;
            }
            if(fx>=1&&fx<=n&&fy>=1&&fy<=m&&mp[fx][fy]!='#'){
                if(mp[fx][fy]>='A'&&mp[fx][fy]<='Z'){
                    next.xueliang=first.xueliang-a[mp[fx][fy]-'A'];
                }else{
                    next.xueliang=first.xueliang;
                }
                next.x=fx;
                next.y=fy;
                mp[next.x][next.y]='#';
                q.push(next);
            }
        }
    }
    return -1;
}
int main(){
    cin>>n>>m>>k>>h;
    cin>>ax>>ay>>bx>>by;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>mp[i][j];
        }
    }
    for(int i=0;i<k;i++){
        cin>>a[i];
    }
    int ans=bfs(ax,ay,h);
    if(ans<=0){
        cout<<"game over";
    }else{
        cout<<ans;
    }
    return 0;
}
/**************************************************************
    Problem: 2849
    User: yangrenrui
    Language: C++
    Result: 正确
    Time:20 ms
    Memory:2232 kb
****************************************************************/

标签:优先,副本,love,角色,2849,队列,血量,int,first
From: https://blog.csdn.net/yangrenrui/article/details/137458806

相关文章

  • 深度优先遍历判断有向图环路
    本质上,就是通过深度优先来完成所有边的遍历,一旦有环必然会被发现。深度优先遍历这个大家已经很熟悉了,我们需要做的是在每次增加深度时,记下从起点到当前节点所经过的所有节点,一旦重复访问了已经访问过的节点,就必然是有环的。那么我们就需要用一个数组来记录已经访问过的节点。又......
  • 蓝桥杯-外卖店优先级
     代码及其解析#include<bits/stdc++.h>usingnamespacestd;constintN=100010;intorder[N];//order[id]第id号店上一次的订单,记录的是时间intprior[N];//prior[id]第id号店的优先级intflag[N];//flag[id]第id号店在不在优先缓存中structnode{......
  • 进程间通信(队列和生产者消费者模型)
    进程间通信(队列和生产者消费者模型)一、关于进程间通信[1]什么是进程间通信(Inter-ProcessCommunication,IPC)进程间通信(Inter-ProcessCommunication,IPC)是指两个或多个进程之间进行信息交换的过程。它是一种计算机编程技术,用于在不同进程之间共享数据和资源。[2]如何实......
  • Spring Boot、Nacos配置文件properties、yml、yaml的优先级
    在标准的SpringBoot应用中,本地配置加载顺序如下:bootstrap.yamlbootstrap.propertiesbootstrap-{profile}.yamlbootstrap-{profile}.propertiesapplication.yamlapplication.propertiesapplication-{profile}.yamlapplication-{profile}.propertiesnacos配置中心共享......
  • 线程优先级
    线程调度器按照优先级决定应该调度哪个线程来执行,优先级高的只是获得调度的概率增加了,不一定每次都调度优先级高的线程的优先级用数字来表示,范围是(1~10)Thread.MIN_PRIORITY=1;Thread.MAX_PRIORITY=10;Thread.NORM_PRIORITY=5;使用以下方法来改变或获取优先级get()priority......
  • 数据结构----栈和队列详细操作完整代码(C语言)
    栈和队列是两种常用的,重要的数据结构栈和队列是限定插入和删除只能在表的“端点”进行的线性表栈和队列是线性表的子集(是插入和删除位置受限的线性表)栈定义:只能在表的一端(栈顶)进行插入和删除运算的线性表逻辑结构:与线性表相同,仍为一对一关系存储结构:用顺序栈或链栈存......
  • 优先队列的基本实现【数据结构与算法—TypeScript 实现】
    笔记整理自coderwhy『TypeScript高阶数据结构与算法』课程特性效率比普通队列高每个出队元素拥有最高优先级可以用数组、链表等数据结构实现,但是堆结构是最常用的实现方式设计实现方式:基于堆结构实现,堆结构底层基于数组实现属性:heap:存放队列元素方法:enq......
  • 队列-单端队列
    队列和栈非常类似,栈的一端是封闭的,类似一口深井,遵循先进后出原则FILO.队列则两端是放开的,抽象于现实世界的排队现象,遵循先进先出原则FIFO.队列在尾部进行元素的新增,称为"入队",然后从头部移除元素,成为"出队".生活中我们去坐火车进站检票,去某个机关办理......
  • C++要点细细梳理——trivial:运算符优先级、switch、临时变量默认赋值等
    1.运算符优先级在C语言中,运算符的优先级决定了在表达式中各个运算符的执行顺序。当一个表达式中有多个运算符时,优先级高的运算符会先被计算。如果两个运算符的优先级相同,那么它们的结合性(从左到右或从右到左)会决定它们的计算顺序。以下是一些基本的C语言运算符优先级(从......
  • Kafka、ActiveMQ、RabbitMQ、RocketMQ四大消息队列优劣对比与选择指南
    在分布式系统架构中,消息队列(MessageQueue,MQ)扮演着至关重要的角色,它作为异步通信的核心组件,能够实现系统解耦、削峰填谷、数据缓冲等功能。本文将聚焦于四大主流消息队列——Kafka、ActiveMQ、RabbitMQ、RocketMQ,深度剖析它们各自的优缺点,并在最后提供一份详尽的选择指南,以助......