文章

37

粉丝

68

获赞

6

访问

7.0k

头像
1124 生化武器2
综合
发布于2024年3月13日 14:21
阅读数 243

#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] !=...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发