CF173B Chamber of Secrets(01 BFS + 二分图)

Description

给定一个张 n × m n \times m n×m 的网格图,有一束激光从左上角向右射出,每次遇到 #。你可以选择使用一次魔法,让光线从 # 的四个方向射出,也不用魔法可以直接穿过 #。求最少用多少次魔法才能让激光从第 n n n 行向右边射出。

Solution

好久前写的题了,码风都不一样。

先考虑转换,一行经过一个 # 可以以一的代价到一列,反之同理。所以可以建一个二分图,一个点集代表行一个点集代表列。如果一个格子上有 #,那么将对应的行列相连。再用 bfs 跑一次从第一行到第 n n n 行的最短路即可。

还有 01 BFS 的做法,这就直接了当了,对于一个 #,从四个方向射出的花费为一,否则没有花费,直接上 01 BFS。

Code

01 BFS

#include <bits/stdc++.h>
using namespace std;
const int N = 1000 + 5;
#define INF (1 << 29)
int n, m;
char grid[N][N];
int dist[N][N][4];
int vis[N][N][4];
int fx[] = {1, -1, 0, 0};
int fy[] = {0, 0, 1, -1};
deque <int> q;
void add_front(int x, int y, int dir, int d) {
    if (d < dist[x][y][dir]) {
        dist[x][y][dir] = d;
        q.push_front(dir);
        q.push_front(y);
        q.push_front(x);
    }
}
void add_back(int x, int y, int dir, int d) {
    if (d < dist[x][y][dir]) {
        dist[x][y][dir] = d;
        q.push_back(x);
        q.push_back(y);
        q.push_back(dir);
    }
}
int main() {
    cin >> n >> m;
    for (int i = 0; i < n; i++) cin >> grid[i];
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
            for (int k = 0; k < 4; k++) dist[i][j][k] = INF;
    add_front(n - 1, m - 1, 3, 0);
    while (!q.empty()) {
        int x = q[0], y = q[1], dir = q[2];
        q.pop_front(); q.pop_front(); q.pop_front();
        if (vis[x][y][dir]) continue;
        vis[x][y][dir] = true;
        int d = dist[x][y][dir];
        int nx = x + fx[dir], ny = y + fy[dir];
        if (nx >= 0 && nx < n && ny >= 0 && ny < m) add_front(nx, ny, dir, d);
        if (grid[x][y] == '#')
            for (int i = 0; i < 4; i++)
                if (i != dir) add_back(x, y, i, d + 1);
    }
    if (dist[0][0][3] == INF) cout << -1 << endl;
    else cout << dist[0][0][3] << endl;
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ISPE(International Society for Pharmaceutical Engineering)控温室是一种专门用于药物工业的设备,用于控制和维持特定温度条件的封闭环境。它通常用于药品制造、质量控制和研发过程中,以确保药品的稳定性和质量。 ISPE控温室具有以下特点: 1. 温度控制:ISPE控温室具备精确的温度控制功能,可以根据需要设置和维持特定的温度范围。这对于药品质量和稳定性至关重要,因为许多药物的有效性和物化特性会随温度变化而改变。通过控温,药品制造商和研究人员可以在稳定的温度条件下进行研发和生产,以确保药品质量符合预期。 2. 精确度和稳定性:ISPE控温室设计和制造时注重精度和稳定性。它采用高精度的温度控制系统和优质的绝缘材料,以减少温度波动和外界温度对内部环境的影响。这种设计保证了控温室内部能够提供准确、稳定的温度环境,使药品制造过程更加可靠和重复性。 3. 安全性:ISPE控温室还具备重要的安全功能。它配备了安全措施,如过温保护系统和报警装置,以确保在温度异常或意外情况下能及时采取措施避免药品受损或危害人员安全。控温室还可以提供密封的环境,减少外部污染物和湿度对药品质量的影响。 总之,ISPE控温室是一种用于药物工业的设备,旨在提供精确稳定的温度环境,以确保药品的质量和稳定性。通过控温室,药品制造商和研究人员可以在一定温度范围内进行研发、生产和质量控制,满足监管要求并确保药品的安全和有效性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值