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脱机烧录 在线烧录

5分钟搞定kkFileView 4.4.0 Docker部署:小白也能上手的完整配置流程

本文提供了一份针对kkFileView 4.4.0版本的Docker部署完整指南。通过使用预构建的Docker镜像,即使是新手也能在5分钟内完成文件预览服务的搭建,涵盖从环境准备、镜像拉取、容器启动到服务验证的全流程,并分享了进阶配置与生产环境优化建议。

mango的博客 526

STC单片机烧录方法

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

m0_68251200的博客 2317

专治疑难系列 - 解决打印机凭证冲突问题

一、问题描述 二、解决方法 三、问题已解决

Passerby_Wang的博客 2万+

双向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

实战分享:如何用Java调用Doris FE接口实现高效Stream Load数据导入(附完整代码)

本文详细介绍了如何通过Java调用Doris FE接口实现高效的Stream Load数据导入,包含完整代码示例和性能优化技巧。Stream Load作为Doris的高效数据导入方式,相比传统JDBC提升5-10倍速度,适用于大规模数据处理场景,帮助开发者解决高吞吐量数据导入挑战。

weixin_29304985的博客 419

麦克斯韦电磁场理论

1)从知识先后上说:麦克斯韦方程组为理解光的传播、反射、折射等现象提供了理论基础。不理解基础,怎么能理解上层建筑。2)从如何学懂上说,把基础学习的越牢,越深刻,后续学习上层建筑就会水到渠成一些,不会越学越多疑问。而是越学越少疑问。

weixin_55255438的博客 2825

HDU3085 NightmareⅡ 双向BFS

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

正月看雪花的博客 552

Multi-Agent

Multi-Agent System(MAS,多代理系统)是分布式人工智能(DAI)领域皇冠上的明珠,其核心思想是通过多个自主、交互、目标导向的智能体(Agent)的协同与竞争,解决单智能体无法或难以高效处理的复杂问题——包括大规模资源调度、多模态数据理解与决策、复杂软件架构的自治运维、甚至未来城市级的交通与能源管理。本文将以结构化分析推理和第一性原理思考。

AI智能探索者的博客 407

HDU 3085 —— Nightmare Ⅱ 双向BFS

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

0x3f3f3f3f 480

044、手持视频抖动严重?OpenCV 光流 + IMU 融合的电子防抖工程方案

本文探讨了基于OpenCV光流和IMU融合的手持视频电子防抖方案。作者从实际工程经验出发,分析了纯光流和纯IMU方案的局限性,指出时间戳对齐和坐标系标定是关键挑战。文章详细介绍了融合滤波器的实现方法,推荐互补滤波替代卡尔曼滤波,并提出了动态调整融合系数的策略。在光流算法优化方面,建议采用网格化FAST特征点和前后向误差检测。最后分享了运动补偿裁剪策略和多线程流水线设计,强调在嵌入式设备上使用NEON指令优化性能。该方案通过精确的时间同步和传感器融合,有效解决了手持拍摄中的高频抖动问题。

ai技术增长的博客 251

Scale-up,scale-out技术概述

本文系统分析了Scale-up与Scale-out两种扩展技术在现代计算中的应用与发展。Scale-up通过增强单节点性能,适用于高耦合任务,而Scale-out通过横向扩展节点,实现高可用性和无限扩展。在芯片层面,Chiplet技术推动Scale-up发展;在数据中心层面,二者协同工作构建强大集群。光模块在长距离高带宽传输中发挥关键作用。文章对比了NVIDIA、AMD和Broadcom三家公司的技术路线,指出NVIDIA采用封闭生态,AMD选择开放标准,Broadcom则主导底层连接技术。未来发展方向将聚

元直的博客 1446

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

Unity-RetargetPro3-动画插件试用

一个名气大于实战的插件。

大话程序员 711

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

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

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

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

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、付费专栏及课程。

余额充值