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

拯救大兵瑞恩——状态压缩 + 复合BFS + 动态规划 + 坐标压缩

题目

代码

#include<bits/stdc++.h>
using namespace std;
#define x first
#define y second
typedef pair<int, int> PII;
const int N = 11;
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
int key[N*N], g[N*N][N*N], d[N*N][1<<N];
int n, m, p;
int get(int x, int y)
{
    return (x-1)*m+y;
}
int bfs()
{
    memset(d, -1, sizeof d);
    queue<PII> q;
    q.push({1, key[1]}); d[1][key[1]] = 0;
    
    while(q.size())
    {
        int loc = q.front().x, ky = q.front().y; q.pop();
        
        for(int i = 0; i < 4; i++)
        {
            int nx = (loc-1) / m + 1 + dx[i], ny = (loc-1) % m + 1 + dy[i];
            int nloc = get(nx, ny);
            if(nx < 1 || ny < 1 || nx > n || ny > m || !g[loc][nloc]) continue;
            if(~g[loc][nloc] && !(ky >> g[loc][nloc] & 1)) continue;
            int nky = ky | key[nloc];
            if(~d[nloc][nky]) continue;
            d[nloc][nky] = d[loc][ky] + 1;
            if(nloc == n*m) return d[nloc][nky];
            q.push({nloc, nky});
        }
    }
    
    return -1;
}
int main()
{
    cin >> n >> m >> p;
    int k;
    cin >> k;
    memset(g, -1, sizeof g);
    for(int i = 1; i <= k; i++)
    {
        int a1, b1, a2, b2, c;
        cin >> a1 >> b1 >> a2 >> b2 >> c;
        int a = get(a1, b1);
        int b = get(a2, b2);
        g[a][b] = c;
        g[b][a] = c;
    }
    
    int q;
    cin >> q;
    for(int i = 1; i <= q; i++)
    {
        int a, b, c;
        cin >> a >> b >> c;
        int t = get(a, b);
        key[t] |= 1 << c;
    }
    
    cout << bfs();
}


http://www.kler.cn/news/355611.html

相关文章:

  • VulnHub-DC-1靶机
  • docker 资源限制+调优详解
  • Golang 并发编程:通道(Channel)的详细用法
  • Java | Leetcode Java题解之第493题翻转对
  • Midjourney中文版:开启AI绘画新时代
  • 基于SSM出租车管理系统的设计
  • nodejs 实现linux 磁盘挂载 磁盘健康检测(smartmontools) 系统内存cpu性能监控
  • windows C++-有效使用PPL(三)
  • 力扣 简单 141.环形链表
  • Miniconda管理虚拟环境【Python环境配置】
  • 【JS、数组】flat的基本用法
  • 开源vGPU方案 HAMi实现细粒度GPU切分——筑梦之路
  • 观测云 AI 助手上线:智能运维,从此触手可及!
  • 使用软件模拟按键显示屏,上下左右确认取消按键,来修改IP端口号等参数。
  • Hi3061M——VL53L0X激光测距(IIC)(同样适用于其他MCU)2
  • rk3588 opencv 的使用
  • Android 编译时出现Android resource linking failed.without required default value.
  • perl读取目录,写入文件
  • 高校企业数据可视化平台功能介绍/特色功能
  • 骑砍霸主MOD天芒传奇Ⅱ·前传-序章