当前位置: 首页 > news >正文

【题解】洛谷 P3395 路障

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.hskmm.com/?act=detail&tid=35222

相关文章:

  • (薛定谔のCSP-S)模拟35 2025.10.20
  • AI建的网站,真的对SEO友好吗?深度剖析其优势与潜在缺陷
  • 追忆
  • 高效增量综合
  • 2025年上海律师推荐排行榜,经侦律师,民事纠纷律师,刑事律师,经济律师,婚姻律师,法务律师,负债律师事务所专业解析
  • 结对项目———四则运算
  • luogu P14259 兄妹(siblings)
  • 2025年通风设备厂家权威推荐榜:通风气楼/通风天窗/排烟天窗/自然通风器,精选圆拱型/一字型/三角型/电动启闭式全系列优质厂家
  • 作业操作步骤
  • 2025年化工原料厂家推荐排行榜:双氧水/片碱/盐酸/磷酸/PAC/聚丙烯酰胺/消泡剂/阻垢剂等工业级化学品优质供应商
  • 2025年棋牌室加盟品牌权威推荐榜:自主棋牌室加盟,自助棋牌室加盟,智能棋牌室加盟,共享棋牌室加盟品牌综合评测与选址运营指南
  • 模拟赛记录
  • 结对项目--小学四则运算题目生成器
  • 2025年焊接变位机厂家权威推荐榜:变位机/双轴变位机专业制造,高精度传动与定制化解决方案实力解析
  • 阿里云智能语音简单使用:语音识别
  • 10月20日
  • 20232426 2025-2026-1 《网络与系统攻防技术》实验二实验报告
  • 10.20
  • 题单
  • 计数
  • 2025年风机盘管厂家权威推荐榜:两联供室内机/水系统空调室内机/全包围风机盘管/超薄风机盘管/静音风机盘管/半包围风机盘管/单冷源除湿新风机/五恒空调
  • Wamp 启动图标橙色(2/3 服务运行):MySQL 服务启动失败解决方案
  • 文章测试
  • 2025年防腐工程厂家最新权威推荐榜:喷砂/热喷锌/热喷铝/油漆涂装/热喷耐磨材料,专业工艺与长效防护解决方案
  • 详细介绍:计算机工作原理(简单介绍)
  • 2025年振动电机厂家推荐排行榜,新型振动电机,高频振动电机,MV卧式振动电机,防爆振动电机,低噪声振动电机,三段式振动电机,卧式振动电机,直流振动电机,节能振动电机,侧板式振动电机公司推荐
  • 2025年超声波检测设备厂家权威推荐榜:超声波检测系统,相控阵/高频/水浸/液冷板/钎焊超声波检测,专业设备与技术实力深度解析
  • 页面测试记录
  • 2025年律师事务所权威推荐榜单:房产纠纷/土地/拆迁/继承,婚姻家事/离婚/抚养权/财产纠纷,刑事辩护/合同纠纷/债务债权/交通事故/股权/劳动/企业顾问/知识产权
  • AWS IMDSv2区域级强制实施:提升云安全新举措