文章

20

粉丝

224

获赞

57

访问

138.6k

头像
和 1126 那题差不多,但是因为我没注意到 No 的第二个单词要小写,调试了好几个小时才发现,麻了。。
P1124
发布于2022年2月22日 20:34
阅读数 6.8k

#include<iostream>
#include<cstring>
#include<queue>
using namespace std;

const int maxn = 100 + 2;
char mpt[maxn][maxn];  // 存储房间结构
int dir[4][2] = {{0, 1}, {0, -1}, {-1, 0}, {1, 0}};  // 毒气的扩散方向:上、下、左、右

int T, N, M, t, gx, gy, sx, sy;  // 测试案例数目、房间的高、宽、毒气扩散时间、表演的地点、观看表演的地点

struct node {
	int x, y;
};

// 使用广度优先搜索求解,返回值为真说明在 t 秒时间内 SJ 还是安全的,输出现在房间里的情况,否则输出 No
bool bfs(int gx, int gy, int sx, int sy, int t) {
	queue<node> gq, sq;  // 使用队列来维护一层层发散的优先级
	gq.push(node{gx, gy});
	sq.push(node{sx, sy});
	while (t--) {
		int gq_size = gq.size();  // 当前队列里元素的个数,遍历当前队列的元素,将当前秒内房间的毒气进行扩散
		// 毒气扩散
		while (gq_size--) {
			node gnow = gq.front();
			gq.pop();
			for (int i = 0; i < 4; ++i) {  // 上下左右四个方向
				int gnx = gnow.x + dir[i][0];
				int gny = gnow.y + dir[i][1];
				// 保证扩散到的位置是位于房间内并且是还没被毒气充满的位置
				if (gnx >= 1 & gnx <= N & gny >= 1 & gny <= M & mpt[gnx][gny] != 'X' & mpt[gnx][gny] != 'G') ...
登录查看完整内容


登录后发布评论

2 条评论
vanffer
2024年6月19日 01:01

大佬,请问下为啥没有

  1. // 毒气无法扩散了则退出循环
  2. if (gq.empty()) break;就是wrong answer呢?感觉不会影响啊

赞(0)

Dear_Mr_He : 回复 vanffer: 题目中说了“当气体不能扩散的时候,人就觉得安全了,他就不会动了。”,所以要加上这段代码。

2024年6月27日 11:23