HDU3085 - Nightmare Ⅱ(双向BFS)

STC单片机批量烧录神器:U8W-Mini脱机下载保姆级教程(含固件升级与自动下载设置) 本文详细介绍了STC单片机批量烧录神器U8W-Mini的脱机下载保姆级教程,包括硬件配置、固件升级与自动下载设置。通过U8W-Mini烧录器,用户可实现高效、稳定的批量烧录,大幅提升生产效率,特别适合嵌入式产品量产场景。 阅读详情

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=3085


题目大意:

在一个N*M的网格里,有两个人 G 和 M,并且有两只鬼。
G每秒可以走一步,G每秒可以走三步,每只鬼可以分裂,分裂到周围的的两格。假设#为鬼分裂后为1,如下图所示。每只分裂后的新鬼可以继续分裂。

00100
01110
11#11
01110
00100

解题过程:

没做个两个人走的步数不同的bfs,这几天又比较咸鱼,于是去搜了题解。

http://acm.zzkun.com/archives/823

dalao的博客。


题目分析:

先预处理距离,这里可以了解下哈密顿距离。

然后用两个队列进行bfs,bfs操作可以写成一个函数,队列为传进来的参数,每次bfs的时候只bfs一层。层数在外面计数,传进来当参数。

inline 关键字,可以替换宏定义的函数,和宏定义的函数等价。

Node v(1, 2) 可以直接这样创建变量并初始化。


AC代码:

#include <bits/stdc++.h>
using namespace std;

struct Node {
    int x, y;
    //构造方法可以带默认值
    Node(int x = 0, int y = 0):x(x),y(y){}
};

const int dir[4][2] = {{-1,0},{0,-1},{1,0},{0,1}};
const int MAX = 800+5;

int N, M, dist[MAX][MAX];
char data[MAX][MAX];
queue<Node> q[2];
bool vis[MAX][MAX][2];
Node mm, gg, z1, z2;

void init() {
    for (int i = 1; i <= N; i++) {
        for (int j = 1; j <= M; j++) {
            //求两个幽灵到每个点的哈密顿距离,取最短的那个
            int t1 = (abs(i - z1.x) + abs(j - z1.y) + 1) / 2;
            int t2 = (abs(i - z2.x) + abs(j - z2.y) + 1) / 2;
            dist[i][j] = min(t1, t2);
        }
    }
}


//用作判断是否在边界内,这里用内联函数非常合适
inline bool in(int x, int y) {
    return x >= 1 && x <= N && y >= 1 && y <= M && data[x][y] != 'X';
}


//全局的队列,bfs函数只是用来操作一层
bool bfs(int x, int step) {
    int sz = q[x].size();
    while (sz--) {
        Node u = q[x].front(); q[x].pop();
        if (step >= dist[u.x][u.y])
            continue;
        for (int i = 0; i < 4; i++) {
            //可以直接这样调用构造方法
            Node v(u.x + dir[i][0], u.y + dir[i][1]);
            if (in(v.x, v.y) && !vis[v.x][v.y][x] && step < dist[v.x][v.y]) {
                if (vis[v.x][v.y][!x])
                    return true;
                vis[v.x][v.y][x] = true;
                q[x].push(v);
            }
        }
    }
    return false;
}

int solve() {
    while (!q[0].empty()) q[0].pop();
    while (!q[1].empty()) q[1].pop();
    q[0].push(mm), q[1].push(gg);
    memset(vis, 0, sizeof(vis));
    vis[mm.x][mm.y][0] = vis[gg.x][gg.y][1] = true;
    int step = 0;
    while (!q[0].empty() && !q[1].empty()) {
        ++step;
        //对gg bfs三层,mm bfs一层,如果相遇就返回当前的时间
        if (bfs(0, step) || bfs(0, step) || bfs(0, step) || bfs(1, step))
            return step;
    }
    return -1;
}

int main() {
    int T;
    scanf("%d", &T);
    while (T--) {
        scanf("%d %d", &N, &M);
        mm = gg = z1 = z2 = Node(0, 0);
        for (int i = 1; i <= N; i++) {
            scanf("%s", data[i]+1);
            for (int j = 1; j <= M; j++) {
                if (data[i][j] == 'G')
                    gg = Node(i, j);
                if (data[i][j] == 'M')
                    mm = Node(i, j);
                if (data[i][j] == 'Z') {
                    if (!z1.x)
                        z1 = Node(i, j);
                    else
                        z2 = Node(i, j);
                }
            }
        }
        init();
        printf("%d\n", solve());
    }
}
HDU 3085 Nightmare Ⅱ(双向BFS) 题意   A、B在迷宫中,A每回合能走3步,B每回合能走1步,迷宫中还有2个鬼,每回合最先活动,会向两步内的格子分裂,A、B不能碰鬼,求他们最快见面的回合数 思路 ​ 题目中描述A能走3步,实际上意思是A每回合能移动[0,3]步,B也同理,所以只要考虑A、B尽可能最远到达的区域,在当前回合这些区域内都是可达的   将整个题目可以考虑为一个像染色的模型,A、B、鬼分别以每回合3、1、2的速度染色,... 阅读详情

相关推荐

HDU 3085 Nightmare Ⅱ【双向bfs】

Nightmare Ⅱ Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3927    Accepted Submission(s): 1131   Problem Description Last night, little er...

Emiya丶的博客 581

STC脱机烧录

4.先给需要烧录的板子上电,然后点击检测MCU选项,如果能识别到芯片会带出芯片型号,单片机型号不选也行,这里识别到后会自动填充。5.识别成功后给板子下电,然后点下载/编程,再给板子上电(必须这样操作),正常就可以烧录。3.选择芯片型号、串口后再打开需要烧录的文件。1.先安装USB转串口驱动:如CH340等。2.下载STC脱机烧录工具。

qq_43201408的博客 539

STC-ISP编程烧录软件:快速固件更新与开发工具

在现代电子开发领域,编程烧录软件是连接软件与硬件的桥梁,对于开发者而言至关重要。STC-ISP下载编程烧录软件是针对STC系列单片机专门开发的一款工具,它能实现对STC单片机的程序下载、在线编程、擦除及读取操作,具有操作简单、功能丰富、稳定性高的特点。由于STC单片机广泛应用于工业控制、消费电子等领域,因此STC-ISP软件的易用性和高效性使其成为行业内部炙手可热的编程工具。在开始深入了解其核心功能之前,我们首先有必要概述该软件的用途、设计理念及如何满足市场的需求。

weixin_29476595的博客 1298

U8W/U8W-Mini使用与常见问题解决

U8W/U8W-Mini 是一款集在线联机下载和脱机下载于一体的编程工具系列。U8W/U8W-Mini 的应用范围可支持 STC 目前的全部系列的 MCU, Flash 程序空间和 EEPROM 数据空间不受限制,可以在脱离电脑的情况下进行下载工作,可用于批量生产和远程升级。脱机下载板可支持自动增量、下载次数限制以及用户程序加密后传输等多种功能。本文将以U8W/U8W-mini的在线、脱机下载和常见问题解决展开。

优信电子的博客 8561

stc脱机烧录 在线烧录

stc脱机烧录 在线烧录

(一)Tushare Pro教程:股票基本数据接口

 一直使用tushare作数据源,这里开个教程大家一起学习。 一、介绍        tushare是一个python股票数据源,现已升级到tushare pro版本,新版本在数据稳定性和获取速率上大幅提升。与wind、东财等收费数据源相比,tushare pro算是金融数据界的良心之作,其为从事金融工程、量化研究等方向的同学们提供了便利。tushare pro还有一点突出的特色就是已经将股票...

虎毛的博客 4万+

STC单片机烧录方法

stc单片机属于51的,需要下载stc的专用烧录软件,配合keil可以下载烧录进去单片机中,以下取stc8g010k单片机为例说明你需要的软件工具有:stc下载上位机,keil软件记得keil要UV4的硬件工具有:USB转串口模块(一定要确保能用,后续如果烧录不了一定要考虑是不它的问题),stc8g010k单片机我们只需要找到4个 接口:VCC,GND,Tx,Rx按照正常的连接即可----------------------------------------------------------------

m0_68251200的博客 2317

SAP成本核算-事中控制(成本对象控制/成本归集与结算)

本文详细介绍了SAP系统中工单成本归集与结算的全流程管理。主要内容包括:1)工单成本三阶段归集(投料、报工、入库)的具体操作与计算方法;2)工单实际成本结算七步骤:从实际费用归集、成本分割、作业价格计算到差异结算的全过程;3)关键注意事项如测试运行验证、价格单位确认、无在制品处理等。通过标准价计算、实际作业重估等机制,系统实现了生产成本从计划到实际的精确核算,最终生成财务所需的差异结算凭证。所有操作均提供单工单和批量处理两种方式,满足不同业务场景需求。

小九啥也不会 1364

双向bfs --HDU - 3085 Nightmare Ⅱ

HDU - 3085 Nightmare Ⅱ:https://vjudge.net/problem/HDU-3085 题意: G和M在迷宫里寻找对方,M每秒可以走3步,G每次走一步,且只能上下左右走。迷宫里有鬼,鬼每次分裂到上下左右两格位置,直到占满所有格子,鬼可以穿墙,求G和M在不遇到鬼的情况下的最短相遇时间。 思路: 双向bfs,由于M每次走3步,所以M每次要处理3次,这要处理的点就是M每次要...

dajiangyou123456的博客 190

RFSOC实战解析:MTS多片同步的时序校准与相位相干实现

本文深入解析了在RFSOC平台上实现MTS多片同步的关键技术与实战流程。文章从相位相干的重要性出发,详细阐述了SYSREF与SYNC信号的协同工作机制,并提供了从硬件时钟配置到软件API调用的完整MTS实现步骤。重点探讨了时序校准的核心方法,旨在帮助工程师解决多通道系统相位不一致的难题,确保ADC与DAC达到精确的相位相干,从而构建高性能的MIMO和相控阵系统。

weixin_29206669的博客 192

GD32F450以太网(1):ETH 外设接口简介

GD32F450以太网ETH MAC外设接口简介

Zhichao_Zhang的博客 1万+

HDU3085 NightmareⅡ 双向BFS

题目描述 给定一张N*M的地图,地图中有1个男孩,1个女孩和2个鬼。 字符“.”表示道路,字符“X”表示墙,字符“M”表示男孩的位置,字符“G”表示女孩的位置,字符“Z”表示鬼的位置。 男孩每秒可以移动3个单位距离,女孩每秒可以移动1个单位距离,男孩和女孩只能朝上下左右四个方向移动。 每个鬼占据的区域每秒可以向四周扩张2个单位距离,并且无视墙的阻挡,也就是在第k秒后所有与鬼的曼哈顿距离不超过2k的...

正月看雪花的博客 552

海康威视国内版监控设备改英文界面难题:原因解析与解决方案

跨境安防设备部署中,国内采购的海康威视监控设备常因仅支持中文界面导致海外用户无法操作。本文剖析了该问题的核心原因:海康威视对国内版和海外版设备实行区域锁定策略,国内版固件仅内置中文且无法通过常规方式切换语言。针对此问题,文章提供了三种解决方案:1)官方合规的海外版固件更换;2)低成本的操作界面翻译与远程协助;3)长期更换海外版设备的彻底解决方案。同时给出了跨境采购的注意事项,强调应提前确认设备版本、拒绝非官方改造并预留适配时间。

海康威视技术支持 3961

HDU 3085 —— Nightmare Ⅱ 双向BFS

原题:http://acm.hdu.edu.cn/showproblem.php?pid=3085 题意: ' X ' 表示墙;' . ' 表示空地;' Z ' 表示鬼(鬼有两只); M每秒走三步;G每秒走一步;鬼每秒分裂,每次分裂距离鬼两步距离的地方都会被鬼覆盖,且鬼可以穿墙(当然鬼的分身也可分裂); 每秒鬼先分裂,然后M 和 G才走; 问在不遇到鬼的情况下,至少过几秒M和G可以相遇;

0x3f3f3f3f 480

CANoe连接Option Scope使用方法

本文档主要介绍如何使用CANoe Option .Scope捕获CAN总线上的物理波形,并利用眼图进行分析。

测试领域技术分享 1356

地下管网巡检机器人:基于YOLOv8与UI界面的智能化系统设计与实现

通过YOLOv8模型的目标检测功能结合实时视频流,我们能够实现对地下管网巡检机器人的智能化控制。系统通过图像识别技术帮助巡检人员快速识别管道中的各种缺陷和障碍物,从而提高巡检效率和准确性。未来,我们可以继续优化模型,增加更多的目标类别,并通过强化学习等方法提高机器人的自主巡检能力。此外,随着硬件技术的发展,未来的巡检机器人可能会具备更强的感知能力和更高的智能水平。

YOLO 531

HDU - 3085 Nightmare Ⅱ(双向BFS+曼哈顿距离)

HDU - 3085 Nightmare Ⅱ #include <cstring> #include <iostream> #include <algorithm> #include <queue> using namespace std; typedef pair<int, int> PII; const int N = 810; int n, m; char g[N][N]; int st[N][N]; PII ghost[2];

00后的博客 423

Python 爬虫实战:爬取豆瓣电影 Top250 完整数据

本文基于Python技术实现了豆瓣电影Top250榜单数据的合规爬取与分析。针对豆瓣电影页面的分页结构、反爬机制等特点,采用requests库获取数据,结合BeautifulSoup解析HTML节点,并通过正则表达式提取电影名称、评分、导演等核心字段。爬虫实现了随机User-Agent、请求间隔控制等反爬规避策略,严格遵守豆瓣社区使用规范。最终数据经清洗后存储为结构化Excel文件,并提供了数据可视化与增量更新方案。该方案为影视研究提供了可靠的数据获取方法,同时确保符合非商业使用、适度爬取等合规要求。

2503_91057718的博客 3460

HDU3085 Nightmare Ⅱ[双向bfs]

D - Nightmare Ⅱ Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Description Last night, little erriyue had a horrible nightmare. He dreamed t

ControlBear的博客 1207

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

hdu3085 Nightmare Ⅱ 双向BFS 模板题

Nightmare ⅡTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3068    Accepted Submission(s): 874Problem DescriptionLast night, little erriyue had ...

popcjz的博客 2126

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

hdu 3085 Nightmare Ⅱ (双向bfs)

Nightmare Ⅱ Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 716    Accepted Submission(s): 133 Problem Description Last night, litt

To be what you what to be! 1607

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

HDU 3085 Nightmare Ⅱ [双向BFS]

Nightmare Ⅱ Problem Description Last night, little erriyue had a horrible nightmare. He dreamed that he and his girl friend were trapped in a big maze separately. More terribly, there are two ghosts...

Janice_zh的博客 379

HDU3085 Nightmare Ⅱ —— 双向BFS + 曼哈顿距离

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3085 Nightmare Ⅱ Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2790    Accepted Sub

A man can be destroyed, but not defeated. 1206

hdu3085Nightmare Ⅱ(双向BFS)

Nightmare Ⅱ Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4397 Accepted Submission(s): 1269 Problem Description Last night, little erriyue...

IDrandom的专栏 373

HDU - 3085 Nightmare Ⅱ 双向bfs

Last night, little erriyue had a horrible nightmare. He dreamed that he and his girl friend were trapped in a big maze separately. More terribly, there are two ghosts in the maze. They will kill the p...

zamaochick的博客 206
上一篇: 博弈模板(转载)
下一篇: 使用OpenMP实现并行归并排序(Report)
ACM_Fish
博客等级 码龄10年 69粉丝 76原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值