hdu 1242 Rescue(A*索搜)

2023-10-27

http://acm.hdu.edu.cn/showproblem.php?pid=1242
题意是从r找到a,路过.时间+1,路过x时间+2,#围墙,求最短的时间。
用a[n][m]保存位置,围墙为-1,.为1,x为2。用A*索搜计算出每一步的f值,在通过优先队列f最小的开始出队列,直到找到为止。

s为当前已用的时间。
h为预测到目标地点的时间下界。
f=s+h;

代码:

#include<iostream>
#include<queue>
using namespace std;
int _move[4][2] = { { 1, 0 }, { -1, 0 }, { 0, 1 }, { 0, -1 }};
int b;
struct node
{
    int f, s, h;
    int x, y, step;
    friend bool operator<(node n1, node n2)
    {
        return n2.f<n1.f;
    }
};
int n, m,a[205][205];
int s_x, s_y, e_x, e_y;
int getH(int x,int y){
    return abs(x - e_x) + abs(y - e_y);
}
int isOk(int x, int y){
    if (x < 0 || x >= n || y < 0 || y >= m) return 0;
    return 1;
}
void bfs(){
    priority_queue<node> qu;
    node now,temp;
    now.x = s_x;     now.y = s_y;
    now.h = getH(s_x, s_y); now.s = 0;
    now.f = now.h + now.s;
    qu.push(now);
    while (qu.size()>0)
    {
        now = qu.top(); qu.pop();
        if (now.x == e_x&&now.y == e_y){
            cout << now.s<<endl;
            b = 1;
            return;
        }
        a[now.x][now.y] = -1;
        for (int i = 0; i < 4; i++){
            temp.x = now.x + _move[i][0];
            temp.y = now.y + _move[i][1];
            if (isOk(temp.x, temp.y) && a[temp.x][temp.y] >= 0){
                temp.s = now.s + a[temp.x][temp.y];
                temp.h = getH(temp.x,temp.y);
                temp.f = temp.s + temp.h;
                qu.push(temp);
            }
        }
    }

}
int main(){
    while (cin>>n>>m)
    {
        b = 0;
        char temp;
        for (int i = 0; i < n; i++){
            for (int j = 0; j < m; j++){
                cin >> temp;
                if (temp == '.') a[i][j] = 1;
                else if (temp == 'x') a[i][j] = 2;
                else if (temp == 'r'){
                    a[i][j] = 1;
                    e_x = i;
                    e_y = j;
                }
                else if (temp == 'a'){
                    a[i][j] = 0;
                    s_x = i;
                    s_y = j;

                }
                else
                {
                    a[i][j] = -1;
                }
            }
        }
        bfs();
        if (!b) cout << "Poor ANGEL has to stay in the prison all his life." << endl;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

hdu 1242 Rescue(A*索搜) 的相关文章

  • 基本原理图的制作

    以一个案例演示 完成以下要求 1 采用网络标号进行元件间的连线 2 单独修改元件的封装 标称值等参数 3 采用自动编号的方法对原理图中所有元件进行整体编号 4 修改原理图中相同元器件的封装值 5 完成附图所示原理图的制作 步骤 1 创建文件
  • 『学Vue2+Vue3』Vuex 是什么?vuex 的使用

    一 Vuex 概述 目标 明确Vuex是什么 应用场景以及优势 1 是什么 Vuex 是一个 Vue 的 状态管理工具 状态就是数据 大白话 Vuex 是一个插件 可以帮我们管理 Vue 通用的数据 多组件共享的数据 例如 购物车数据 个人
  • cmake安装与使用

    目录 1 下载与安装 2 Cmake使用 2 1 在window 开始 中点击cmake gui exe 打开cmake程序面板 2 2打开需要编译的cmake代码工程 环境 Windows10 64bit 1 下载与安装 下载地址 htt

随机推荐

  • Web应用程序项目以配置使用IIS。未找到Web服务器

    针对这个问题 本人也从网上找了一下解决办法 但是不是太全面 接下来我会总结一下我所用到过的方法 1 在文件夹下面编辑该Web项目的csproj文件 把UserIIS改为False 2 可以在IIS服务器里面配置一个IISUrl里面的地址 地
  • find、grep--根据内容找文件

    1 可以找到相关的文件名或目录名所在的位置 find name file or dir name linux下的find文件查找命令与grep文件内容查找命令 云社区 华为云 2 找出文本文件的位置 并找出内容包含 关键字 的文件 find
  • 解决vue安装less-loader依赖失败的问题

    vue可视化面板中提供的less loader依赖安装失败 倒是以下代码识别不了 出现错误信息 还有一种情况就是在vue cli视图中安装的less loade版本过高 10 1 0 在我们运行项目时 虽然已经安装了 但是版本过高 出现了不
  • typescript环境安装及IDEA配置typescript

    一 typescript环境安装 1 安装node npm 下载官网安装包 http nodejs cn download 双击运行 2 安装完node npm后 查看是否安装成功 node v npm v 3 安装typescript n
  • es--module模块

    一 初识Module 模块 一个一个的局部作用域的代码块 模块系统需要解决的主要问题 模块化的问题 消除全局变量 管理加载顺序 Module的基本用法 import export 只要你会用到 import 导入 或 export 导出 在
  • SpringBoot基础(1)

    目录 SpringBoot基础 1 SpringBoot基础 2 SpringBoot基础 3 1 hello world 相当简单 pom xml文件中配置
  • c语言写60秒关机小程序,输入我是猪才可关闭:整蛊你的朋友吧

    若想要让朋友不知情的情况下上当 可以在vs环境下 选择左上角把Debug版本改为Release版本运行 然后在我的电脑中此文件夹下点开release文件中的exe程序发给朋友 别轻易改数据 关机程序小游戏 goto语句运用 1 电脑运行起来
  • Python 进阶:函数装饰器

    一 前言 本小节主要梳理函数装饰的用法 循序渐进 逐层增加条件 加大复杂度和难度 环境说明 Python 3 6 windows11 64位 二 函数装饰器 装饰器的典型行为 把被装饰的函数替换成新函数 二者接受相同的参数 而且 通常 返回
  • flutter报错: Class ‘kotlin.Unit’ was compiled with an incompatible version of Kotlin.

    Class kotlin Unit was compiled with an incompatible version of Kotlin The binary version of its metadata is 1 5 1 expect
  • 简单的shell 脚本

    简单的shell 脚本 1 shell编程 编写shell脚本 2 执行方法 2 1 sh执行 sh log sh 2 2 执行 log sh 注意 需要先保证log sh文件有可执行的权限 chmod u x log sh 3 固定格式
  • vmware workstation的镜像文件下载

    今天安装了vmware workstation虚拟机 然后需要镜像文件 我就下载了迅雷精简版 说实话这个迅雷精简正好 然后下载了win10和win8的镜像文件 之前得下载地址不能用了 哎下次加上去
  • 使用STM32的DSP库时,遇到的一个bug

    Bug提示如下 Drivers CMSIS Include core cm4 h 81 error 35 error directive Compiler generates FPU instructions for a device wi
  • android 完全退出应用程序

    2019独角兽企业重金招聘Python工程师标准 gt gt gt hot3 png android程序中如果有很多activity 又没有在跳转过程中全都finish 很可能在最后退出程序时 当前的activity结束了 但是又 跳转到a
  • [陇剑杯 2021]之Misc篇(NSSCTF)刷题记录⑤

    NSSCTF Misc篇 陇剑杯 2021 日志分析 陇剑杯 2021 日志分析 问1 陇剑杯 2021 日志分析 问2 陇剑杯 2021 日志分析 问3 简单日志分析 陇剑杯 2021 简单日志分析 问1 陇剑杯 2021 简单日志分析
  • nginx 缓存配置 expires 和 add_header Cache-Control 的总结

    hello 大家好 我是jordy 欢迎大家光临我的博客 我的联系方式有 qq 1760282809 363232564 欢迎同行多多交流 一起学习 一起进步 nginx 开启静态缓存 location js css png jpg jpe
  • 5 个 Composer 小技巧

    1 仅更新单个库 只想更新某个特定的库 不想更新它的所有依赖 很简单 composer update foo bar 此外 这个技巧还可以用来解决 警告信息问题 你一定见过这样的警告信息 Warning The lock file is n
  • Linux系统之部署Node.js环境

    Linux系统之部署Node js环境 一 Node js介绍 1 1 Node js简介 1 2 npm简介 1 3 Node js官网 二 本地环境介绍 2 1 本地环境规划 2 2 本次实践介绍 三 部署Node js环境 3 1 下
  • SpringMVC是如何让Controler替代Servlet工作的

    在学到JavaEE的部分的时候 知道了我们自己写Servlet 然后来处理一个请求的get方法或者是post方法 但是在工作后 直接使用了SpringMVC的框架 工作的时候不再需要自己写Servlet 而是写一个Controler 然后将
  • 网站头像: favicon.ico

    很多人问过我 你的网站在地址栏中的那个图标是怎么弄出来的 这个文件就是在WEB根目录下的favicon ico文件 http www example com favicon ico 很多门户网站都有这个文件 我觉得它的作用和MSN中的人物头
  • hdu 1242 Rescue(A*索搜)

    http acm hdu edu cn showproblem php pid 1242 题意是从r找到a 路过 时间 1 路过x时间 2 围墙 求最短的时间 用a n m 保存位置 围墙为 1 为1 x为2 用A 索搜计算出每一步的f值