文章
99
粉丝
120
获赞
8
访问
96.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] !=...
登录后发布评论
暂无评论,来抢沙发