【题解】洛谷 P3395 路障

news/2025/10/20 18:54:45/文章来源:https://www.cnblogs.com/feitanjishengwu/p/19153450

image
这道题是一道简单的BFS的题。
我们注意到这道题最不一样的地方是:每秒结束的时刻,C君会在\((x,y)\)上摆一个路障。B君不能走在路障上。
定义一个\(vis\)数组(bfs基本做法),将没有走过的点\(vis[x][y]\)设置为\(0\),将走过的点\(vis[x][y]\)设置为\(1\),将不能走的点\(vis[x][y]\)设置为\(-1\)
每秒走一步,所以我们要在B君每走一步之后将某个\(vis[x][y]\)设置为\(-1\)。我们要将这些点的坐标全部保存下来。
题目中说了数据足够弱,我们可以不考虑B君“被砸死”的情况(实在是太幸运了)。
输入:
每个点都有\(xy\)这两个数据,也可以分开存,但我们这里使用一个结构体存储。

const int dx[5]={0,1,0,-1,0}, dy[5]={0,0,1,0,-1};//可以遍历这两个数组实现移动
struct JF{int x, y;
} quexy[maxn * maxn], bre[maxn * 2];//quexy是bfs的队列 bre存的是路障的坐标
int T, n, seconds=0, mapp[maxn][maxn];//second用来记录秒数,便于取出bre中的数据。mapp用来记录图的状态。

还有,由于是T组数据,我们在输入时要注意重新初始化。

inline void init(){ //输入cin >> n;seconds = 0; //初始化for (int i = 1;i <= maxn;i ++) bre[i].x = bre[i].y = 0;//初始化for (int i = 1;i <= 2 * n - 2;i ++)cin >> bre[i].x >> bre[i].y; //输入路障坐标for (int i = 1;i <= n;i ++)for (int j = 1;j <= n;j ++)mapp[i][j] = 0; //初始化return ;
}

搜索:

void bfs(){quexy[1].x = 1;quexy[1].y = 1; //起点入队(起点为(1,1))int head = 0, tail = 1; //两个指针,分别指向队首和队尾while (head < tail){ //head = tail时说明搜完了head ++; //每次都要以一个为起点向上下左右搜索,将这个移除队列,等价于让head指针后移一个seconds ++; //记录秒数for (int i = 1;i <= 4;i ++){ //四个方向int xx = quexy[head].x + dx[i];int yy = quexy[head].y + dy[i]; //xx yy存储走了一步之后的坐标if ((xx > 0 && xx <= n) && (yy > 0 && yy <= n) && mapp[xx][yy] == 0){//前两个()中的内容用来判断是否越界(是否走出了地图)//而且当且仅当这个地方我们没有走过时,我们才有必要走tail ++; //将这个符合要求的点入队,队尾指针当然要后移mapp[xx][yy] = 1;//更改状态为走到了quexy[tail].x = xx;quexy[tail].y = yy;//坐标入队}}if (mapp[bre[seconds].x][bre[seconds].y] != 1) mapp[bre[seconds].x][bre[seconds].y] = -1;//不用考虑被砸死的情况,而且走过的地方我们也没必要改}return ;
}

输出:

inline void fprint(){if (mapp[n][n] == 1){cout << "Yes" << '\n';return ;}cout << "No" << '\n';return ;
}

完整代码:

#include <iostream>
using namespace std;
const int maxn = 1e3 + 5;
const int dx[5]={0,1,0,-1,0}, dy[5]={0,0,1,0,-1};
struct JF{int x, y;
} quexy[maxn * maxn], bre[maxn * 2];
int T, n, seconds=0, mapp[maxn][maxn];
inline void init(){cin >> n;seconds = 0; for (int i = 1;i <= maxn;i ++) bre[i].x = bre[i].y = 0;for (int i = 1;i <= 2 * n - 2;i ++)cin >> bre[i].x >> bre[i].y;for (int i = 1;i <= n;i ++)for (int j = 1;j <= n;j ++)mapp[i][j] = 0; return ;
}
void bfs(){quexy[1].x = 1;quexy[1].y = 1;int head = 0, tail = 1;while (head < tail){head ++;seconds ++;for (int i = 1;i <= 4;i ++){int xx = quexy[head].x + dx[i];int yy = quexy[head].y + dy[i];if ((xx > 0 && xx <= n) && (yy > 0 && yy <= n) && mapp[xx][yy] == 0){tail ++;mapp[xx][yy] = 1;quexy[tail].x = xx;quexy[tail].y = yy;}}if (mapp[bre[seconds].x][bre[seconds].y] != 1) mapp[bre[seconds].x][bre[seconds].y] = -1;state();}return ;
}
inline void fprint(){if (mapp[n][n] == 1){cout << "Yes" << '\n';return ;}cout << "No" << '\n';return ;
}
int main(){cin >> T;while (T --){init();bfs();fprint();}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/941501.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(薛定谔のCSP-S)模拟35 2025.10.20

咕掉好几场墨泥塞的僵尸来颓题解惹 因为想等大 ~蛇 ~们 ~改完之后再改(根本不会) rt: 你说这是吃薯片-S? 我还是跳楼来的比较快。 这题太**的神秘了,看上去都可做实际上(我)都写不出来。 sssssssssssssad。 A. …

2025最新发布|中国薪酬SaaS软件市场分析及测评

在数字经济浪潮的推动下,中国企业的薪酬管理正经历一场深刻的数字化变革。传统的薪酬管理模式面临效率低下、数据孤立、决策滞后等挑战,已难以适应快速变化的业务需求。同时,中国HR SaaS市场规模持续扩大,智能化和…

CSP-S模拟36

CSP-S模拟36 希望不是大奋。以下是博客签名,正文无关 本文来自博客园,作者:Wy_x,转载请在文首注明原文链接:https://www.cnblogs.com/Wy-x/p/19153400 版权声明:本作品采用「署名-非商业性使用-相同方式共享 4.0…

热点、排版、数据难题?6 款微信编辑器实测推荐

热点、排版、数据难题?6 款微信编辑器实测推荐新媒体人别再“瞎忙”!6款编辑器实测:壹伴AI编辑器才是效率解药 “为了赶热点熬到凌晨,排版反复调整却还是乱码;发完文章只能等数据‘躺平’,不知道哪里要优化;跨平…

AI建的网站,真的对SEO友好吗?深度剖析其优势与潜在缺陷

在AI技术席卷各行各业的今天,“AI建站”已成为众多企业及个人创作者快速触网的首选。然而,一个核心疑虑始终萦绕在许多人心中:这种由机器自动生成的网站,真的对搜索引擎友好吗? 作为一名与代码和搜索引擎打交道的…

追忆

1 我常常追忆过去。 生命瞬间定格在脑海。我将背后的时间裁剪、折叠、蜷曲,揉捻成天上朵朵白云。 云朵之间亦有分别:积云厚重,而卷云飘渺。生命里震撼的场景掠过我的思绪便一生无法忘怀,而更为普通平常的记忆在时间…

高效增量综合

1、什么是增量综合?增量综合的核心思路是:只针对发生变化的设计模块进行重新综合,而非全部重合成。这种策略在大型设计与频繁迭代场景下,能够显著缩短综合时间。 2、关键技术与实践效益 I. 选择性重合成(Selectiv…

2025年上海律师推荐排行榜,经侦律师,民事纠纷律师,刑事律师,经济律师,婚姻律师,法务律师,负债律师事务所专业解析

2025年上海律师推荐排行榜:专业律师与律所深度解析 在法治建设不断深化的今天,专业法律服务已成为企业和个人维护权益的重要保障。上海作为中国的经济中心,法律服务市场需求旺盛,各类专业律师和律师事务所应运而生…

结对项目———四则运算

自动生成小学四则运算题目的命令行程序项目 | 这个作业属于哪个课程 | https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience | |这个作业要求在哪里 | https://edu.cnblogs.com/campus/gdgy/Class34G…

2025年西服定制厂家权威推荐榜:婚纱/结婚/职业/团体/职场/礼服/工作服/公务员西服定制,专业工艺与个性化服务深度解析

2025年西服定制厂家权威推荐榜:婚纱/结婚/职业/团体/职场/礼服/工作服/公务员西服定制,专业工艺与个性化服务深度解析 在当代社会,西服定制已从单纯的着装需求演变为个人品味与专业形象的体现。无论是婚礼场合的婚纱…

作业操作步骤

1、对下载下来的栅格数据做合并2、对合并后的数据用矢量研究区裁剪

luogu P14259 兄妹(siblings)

题目大意 有 \(n\) 本书,其中第 \(i\) 本在 \((x_i,y_i)\),下标从 \(1\) 开始。 两个人从 \((0,0)\) 同时出发

2025年通风设备厂家权威推荐榜:通风气楼/通风天窗/排烟天窗/自然通风器,精选圆拱型/一字型/三角型/电动启闭式全系列优质厂家

2025年通风设备厂家权威推荐榜:通风气楼/通风天窗/排烟天窗/自然通风器,精选圆拱型/一字型/三角型/电动启闭式全系列优质厂家 行业背景与发展趋势 随着工业建筑标准的不断提升和绿色环保理念的深入,现代工业厂房对通…

2025年化工原料厂家推荐排行榜:双氧水/片碱/盐酸/磷酸/PAC/聚丙烯酰胺/消泡剂/阻垢剂等工业级化学品优质供应商

2025年化工原料厂家推荐排行榜:双氧水/片碱/盐酸/磷酸/PAC/聚丙烯酰胺/消泡剂/阻垢剂等工业级化学品优质供应商 行业背景与发展趋势 化工原料作为工业生产的基础性物资,其质量稳定性与供应链可靠性直接关系到下游制造…

2025年棋牌室加盟品牌权威推荐榜:自主棋牌室加盟,自助棋牌室加盟,智能棋牌室加盟,共享棋牌室加盟品牌综合评测与选址运营指南

2025年棋牌室加盟品牌权威推荐榜:自主棋牌室加盟,自助棋牌室加盟,智能棋牌室加盟,共享棋牌室加盟品牌综合评测与选址运营指南 行业背景与发展趋势 近年来,随着休闲娱乐消费升级和智能化技术普及,棋牌室行业迎来了…

10月20日

学习完Java的继承与多态,我深刻体会到面向对象编程的精妙所在。继承就像搭建好了程序的骨架,它让代码复用变得清晰高效,建立了类与类之间清晰的层次关系。而多态则为这副骨架注入了灵魂。它允许我们以统一的接口处理…

结对项目--小学四则运算题目生成器

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience/homework/13479这个作业的目标 实…

2025年焊接变位机厂家权威推荐榜:变位机/双轴变位机专业制造,高精度传动与定制化解决方案实力解析

2025年焊接变位机厂家权威推荐榜:变位机/双轴变位机专业制造,高精度传动与定制化解决方案实力解析 行业技术演进与市场格局分析 焊接变位机作为工业自动化领域的关键设备,其技术发展轨迹与制造业升级需求紧密相连。…

阿里云智能语音简单使用:语音识别

对于绝大多数开发者来说,想要给自己的APP增加语音功能,不太可能自己去开发一套智能语音系统,因为背后涉及到比较多学科的知识,单靠个人和小团队的话很难完成,这个时候我们可以借助一些大平台的产品,来丰富我们自…

20232426 2025-2026-1 《网络与系统攻防技术》实验二实验报告

一、实验目标(内容)使用netcat获取主机操作Shell,cron启动某项任务 使用socat获取主机操作Shell, 任务计划启动 使用MSF meterpreter生成可执行文件(后门),利用ncat或socat传送到主机并运行获取主机Shell 使用MS…