计蒜客-藏宝图(bfs+状压)

几何画板课件集锦 几何画板课件集锦,很好的课件,实用于初学者。 立即下载

藏宝图

蒜头君得到一张藏宝图。藏宝图是一个 10×1010 \times 1010×10 的方格地图,图上一共有 101010 个宝藏。有些方格地形太凶险,不能进入。

整个图只有一个地方可以出入,即是入口也是出口。蒜头君是一个贪心的人,他规划要获得所有宝藏以后才从出口离开。

藏宝图上从一个方格到相邻的上下左右的方格需要 111 天的时间,蒜头君从入口出发,找到所有宝藏以后,回到出口,最少需要多少天。

【分析】BFS+状态压缩

        每个点状态用 d[x][y][state]表示,state表示每个宝藏是否获取的状态压缩。然后BFS即可。

我们将每个宝藏进行编号

    "0......9..",
    "...X..0...",
    ".X..8..X..",
    ".7...X..6.",
    ".X..5.X...",
    "..X....X..",
    ".....X..3.",
    ".X.X..1...",
    ".4....XX..",

    "..X..X2...",

我们标记宝藏从0-9其实是很巧妙的,一个原因是10会占两个字符的位置不可以用1-10编号会改变地图

其次我们保存最终答案的数组是int d[11][11][1<<10];

最后一个维度记录状态也就是用二进制状态压缩后第十个位置时1即1000000000(二进制)而对于数组而言

这是一个十进制数且下标从0开始0~(1<<10)-1,所以我们以下标为0时的数组表示了第一个宝藏的有无状态

也就是移0位,最后输出(1<<10)-1处的数组即可也就是九个1,111111111,表示全部宝藏都有了

code:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
char mat[11][11]={  //藏宝图
    "s......9..",
    "...X..0...",
    ".X..8..X..",
    ".7...X..6.",
    ".X..5.X...",
    "..X....X..",
    ".....X..3.",
    ".X.X..1...",
    ".4....XX..",
    "..X..X2...",
};
int dir[4][2] = {{-1,0},{1,0},{0,-1},{0,1}};//方向
struct node{
    int x;//横坐标
    int y;//纵坐标
    int s;//状态
    node(int xx,int yy,int ss):x(xx),y(yy),s(ss){}
};
int d[11][11][1<<10];//d[X][Y][S]代表到达xy位置时,状态为s(即收集了确定的若干个宝藏时)的最少步数
int in(int x,int y){
    return (x >= 0 && x < 10 && y >= 0 && y < 10 && mat[x][y] != 'X');
}
void bfs(){
    int i;
    int x,y,s;
    int tx,ty,ts;
    queue<node> q;
    memset(d,-1,sizeof(d));
    q.push(node(0,0,0));
    d[0][0][0] = 0;
    while(!q.empty()){
        x = q.front().x;
        y = q.front().y;
        s = q.front().s;
        q.pop();
        for(i = 0; i < 4; i++){
            tx = x + dir[i][0];
            ty = y + dir[i][1];
            ts = s;
            if(in(tx,ty)){
                if(mat[tx][ty] >= '0' && mat[tx][ty] <= '9')
                    ts = s | (1<<(mat[tx][ty]-'0'));
                if(d[tx][ty][ts] == -1){
                    d[tx][ty][ts] = d[x][y][s] + 1;
                    q.push(node(tx,ty,ts));
                }
            }
        }
    }
}
int main(){
    bfs();
    cout << d[0][0][(1<<10)-1] << endl;//下标从0开始所以当所有宝藏收集后对应的数组下标应该为(1<<10)-1
    return 0;
}

B站DRM视频解密流程实战解析:从密钥获取到播放全流程 本文详细解析了B站DRM视频的解密全流程,从识别加密视频、捕获关键网络请求(如playurl接口的widevine_pssh数据),到逆向分析DRM SDK的JavaScript执行逻辑,最终手动模拟EME流程获取解密密钥,并使用mp4decrypt和ffmpeg工具完成视频文件的解密与合并。文章为开发者提供了从密钥获取到播放的完整实战指南。 阅读详情

相关推荐

LIN总线从入门到精通:低成本汽车通信协议原理与实战

在汽车电子和嵌入式系统中,串行通信协议是实现分布式控制的关键技术。其中,LIN(Local Interconnect Network)总线作为一种专为低成本应用设计的单主多从网络协议,其核心原理在于通过简化的“领导-汇报”通信模式,在满足车身控制、传感器数据采集等场景需求的同时,将硬件与布线成本降至最低。LIN总线采用标准化的帧结构,包含间隔场、同步场和受保护标识符场,并依赖调度表来管理通信时序,确保了网络的确定性与可靠性。其技术价值在于为车窗、座椅、灯光等非安全关键系统提供了高性价比的解决方案,是构建分层

weixin_29185167的博客 260

藏宝图(BFS+DFS)

蒜头君得到一张藏宝图。藏宝图是一个 10×10 的方格地图,图上一共有 10 个宝藏。有些方格地形太凶险,不能进入。整个图只有一个地方可以出入,即是入口也是出口。蒜头君是一个贪心的人,他规划要获得所有宝藏以后才从出口离开。藏宝图上从一个方格到相邻的上下左右的方格需要 11 天的时间,蒜头君从入口出发,找到所有宝藏以后,回到出口,最少需要多少天。算是用暴力吧,先把出口和这10个宝藏从0~10编一下号...

唐宋元明清的博客 868

wintab开发例程

 タブレットとスタイラスペンを使うと、パソコンに手書きの線を入力できます。筆圧を入力することができるので毛筆のような表現も可能です。ペンの傾きを入力できる機種もあり、アイデア次第で面白いことに使えそうです。  私は昔(94年頃)、WACOMのタブレットを用いたプログラム開発をしたことがあります。当初A3版ほどの大きさのUDというタブレットを使っていて、その後 ArtPad という小さいサイズの

grass168的专栏 3238

BFS-剪枝走迷宫问题【迷宫与宝藏-OJ1646】

参考博客 https://blog.youkuaiyun.com/qq_34542903/article/details/51100015     题目描述 机器人要在一个矩形迷宫里行动(不能原地停留,只能走向上/下/左/右),每移动一格花费1个单位时间。 迷宫有以下几种元素: 【*】 机器人的起点 【#】 墙。机器人不能走过这些格子 【.】 平地。 机器人可以在上面自由行走 【0-9】 宝藏。...

zujiasheng的博客 919

STM32在六轴机械臂实时控制中的选型与分层架构设计

嵌入式实时控制系统中,微控制器的选型直接决定运动控制精度与系统可靠性。其核心在于匹配确定性中断响应、低延迟外设协同与工业协议栈支持等硬性指标。STM32凭借Cortex-M内核的NVIC调度能力、成熟HAL库及CAN FD/高级定时器等专用外设,在机电一体化场景中成为伺服控制中枢的首选。相比ESP32等通用MCU,STM32在硬实时性、EMC认证生态和工业总线兼容性上具备不可替代优势。本文围绕GTB六轴机械臂项目,详解基于STM32F407的硬件抽象层配置、FreeRTOS任务调度、事件队列解耦及闭环控制数

jupi8的博客 754

Android——Handler详解

1. 简介 Handler是一套 Android 消息传递机制 可以说只要有异步线程与主线程通信的地方就一定会有 Handler。 在多线程的应用场景中,将工作线程中需更新UI的操作信息 传递到 UI主线程,从而实现 工作线程对UI的更新处理,最终实现异步消息的处理 使用Handler消息传递机制主要是为了多个线程并发更新UI的同时,保证线程安全 2. 相关概念解释 Handler、Message、Message Queue、Looper Android消息机制: 以Handler的sendMes

Yawn 7万+

计蒜客蓝桥杯真题:十字图(C++)

  AC代码:  #include&lt;iostream&gt; #include&lt;string&gt; #include&lt;algorithm&gt; using namespace std; int main() { const int MAX = 100; int n,i,j; string map[MAX]; cin&gt;&gt;n; n = (...

我自关山点酒,千秋皆入喉 484

硬件学习笔记(器件篇)—— 磁珠与磁环

因为有这些差别,所有经常会让人们觉得他们并不是一类器件,但实际上他们的原理是一样的。我们使用磁珠是为了利用损耗消耗高频能量,所以如果我们理解了磁珠是如何消耗高频能量的,我们就能理解磁珠的工作原理。

y_u_yu_yu_的博客 1万+

蓝桥杯题解 十字图 python 计蒜客

代码: n = int(input()) row = 4 * n + 5 x = 0 y = 0 graph = [["." for j in range(row)] for i in range(row)] for k in range(n + 1): for j in range(y+2, 4 * n + 5 - (y+2)): graph[x][j] = "$"...

zh的csnd 357

【TRAE调教指南之MCP篇】Context 7 MCP:让AI永远拥有最新技术文档

【TRAE调教指南之MCP篇】Context 7 MCP:让AI永远拥有最新技术文档

funfan的博客 1314

天爱验证码wasm验证码逆向

本文分析了某网站采用WASM加密技术的情况,发现其加密方式主要针对data和轨迹信息,整体加密逻辑变化不大。通过反混淆技术可以还原代码,并确认加密过程分为两步:先对原始参数逐个加密,再调用WASM模块进行最终加密。研究发现关键参数drives和ki都存储在WASM模块内,通过提取wasm_exec.js文件即可直接使用该加密功能。本文仅提供技术研究思路,强调严禁用于任何违法行为。

码王吴彦祖的博客 933

计蒜客 藏宝图 (bfs + 状压)

传送门思路:典型的bfs + 状压啊,一个入口出口,还要拿到地图中多个东西,而且同一个点重复走的话不好标记,这时候就标记状态啊/。。md,退役垃圾狗。。。答案 :48    PS:    这里走回出口没必要在跑一遍bfs,只需要走到出口时判断一下是否所有箱子都拿到了即可。#include &lt;bits/stdc++.h&gt; using namespace std; int a[15][1...

Marcus-Bao的个人主页 869

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

计蒜客 藏宝图

题目链接:藏宝图 说两种解法。 1.由于十个点都要走一次,所以可以枚举10个藏宝点的全排列,再把起点$(0,0)$和终点$(0,0)$放在排列的首尾,用11次bfs即可获得一种走法的最短路径。 2.把用二进制来表示每个藏宝点,$(x,y,status)$表示获得了status的宝物,来到了点$(x,y)$ 贴出位压代码: #include <stdio.h> #incl...

weixin_30691871的博客 163

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

计蒜客 藏宝图(TSP问题)

题意:中文;思路:其实和我访问量最高的那篇哈利波特偷宝藏有点类似,因为需要在回去所以我直接TSP写了,首先抽点建图,只走最短路,存到dis[i][j]数组,表示的是从第i个点到第j个点的最短距离(利用bfs求一哈),之后就抽象出我有n个城市,每次只能走一遍,走完全程在回到起点的最短距离是多少(TSP问题)上代码把;   #include &lt;bits/stdc++.h&gt; using na...

wjmwsgj的博客 332

计蒜客蓝桥B组模拟赛五-F. 藏宝图

蒜头君得到一张藏宝图。藏宝图是一个 10 \times 1010×10 的方格地图,图上一共有 1010 个宝藏。有些方格地形太凶险,不能进入。 整个图只有一个地方可以出入,即是入口也是出口。蒜头君是一个贪心的人,他规划要获得所有宝藏以后才从出口离开。 藏宝图上从一个方格到相邻的上下左右的方格需要 11 天的时间,蒜头君从入口出发,找到所有宝藏以后,回到出口,最少需要多少天

yo_bc的博客 322

计蒜客蓝桥杯模拟五---藏宝图

#include&lt;iostream&gt; #include&lt;queue&gt; #include&lt;cstring&gt; #include&lt;algorithm&gt; using namespace std; struct node { int id,x,y,len; }; struct node N[15]; int dis[15][15]; int dir...

hg_zhh 557

【状压动态规划】藏宝图

大致思路:最短路想到bfs。这其实是bfs的一种变式——不用vis数组了,而是看这个点在“该状态下”是否曾被走过。而状态的表示便是在于把step二维数组变成三维,用第三维去状压表示10个宝藏点的状态。以此在每个状态下都去bfs,最终我们需要的是在每个宝藏点都被取到时走到点(0,0)的step值(即取到全部宝藏之后的状态下bfs第一次到达原点的步数)。我觉得自己能够比较轻松理解的依据是——只要是bf...

It's the Climb 345

【计蒜客】2018 蓝桥杯省赛 B 组模拟赛(五) ---- 结果填空:藏宝图

思路: 自己还是做题做的少呀,一位一次BFS就够了,没有那么简单。这个题目要求出每两个宝藏之间(把起点也算进去)的最短距离, 共计 11 个点,然后枚举,找到最短的一条回路(环)。这样子其实就是把这个藏宝图上的藏宝点和起点看成一张新的地图,构建成了无向图。这样子就很容易得到结果了。 感谢@zudikn 超霸的指点~ AC代码: #include &lt;iostream&gt; #...

WangMeow --- ᶘ ᵒᴥᵒᶅ ฅ^•ﻌ•^ฅ 353

藏宝图

蒜头君得到一张藏宝图。藏宝图是一个 10 \times 1010×10的方格地图,图上一共有 1010 个宝藏。有些方格地形太凶险,不能进入。整个图只有一个地方可以出入,即是入口也是出口。蒜头君是一个贪心的人,他规划要获得所有宝藏以后才从出口离开。藏宝图上从一个方格到相邻的上下左右的方格需要 11 天的时间,蒜头君从入口出发,找到所有宝藏以后,回到出口,最少需要多少天。玩命的搜索啊#include...

someone_and_anyone的博客 499

【搜索】B011_JSK_藏宝图(全排列+bfs)

一、题目描述 蒜头君得到一张藏宝图。藏宝图是一个 10×10 的方格地图,图上一共有 10 个宝藏。有些方格地形太凶险,不能进入。 整个图只有一个地方可以出入,即是入口也是出口。蒜头君是一个贪心的人,他规划要获得所有宝藏以后才从出口离开。 藏宝图上从一个方格到相邻的上下左右的方格需要 1 天的时间,蒜头君从入口出发,找到所有宝藏以后,回到出口,最少需要多少天。 # 二、题解 ## 方法一:bfs...

无敌兔0x01 607

LeetCode LCP 13. 寻宝(状压dp)

LCP 13. 寻宝 我们得到了一副藏宝图,藏宝图显示,在一个迷宫中存在着未被世人发现的宝藏。 迷宫是一个二维矩阵,用一个字符串数组表示。它标识了唯一的入口(用 ‘S’ 表示),和唯一的宝藏地点(用 ‘T’ 表示)。但是,宝藏被一些隐蔽的机关保护了起来。在地图上有若干个机关点(用 ‘M’ 表示),只有所有机关均被触发,才可以拿到宝藏。 要保持机关的触发,需要把一个重石放在上面。迷宫中有若干个石堆(用 ‘O’ 表示),每个石堆都有无限个足够触发机关的重石。但是由于石头太重,我们一次只能搬一个石头到指定地点。

da_kao_la的博客 501

Wpremig和Jhadgre的藏宝图(最大流+二分)

Wpremig和Jhadgre的藏宝图 题目链接:https://ac.nowcoder.com/acm/contest/333/M Description: Jhadgre在生日那天收到了一张神秘的藏宝图,于是他决定和Wpremig分享这张藏宝图,并且去寻宝! 这张藏宝图上总共有N行,每行有M个格子,共N*M个格子,每个格子上写了一个数字。 藏宝图上写了一段字:神秘的有缘人啊...

dft539533的博客 240

【状压DP】leetcode LCP13 寻宝

我们得到了一副藏宝图,藏宝图显示,在一个迷宫中存在着未被世人发现的宝藏。 迷宫是一个二维矩阵,用一个字符串数组表示。它标识了唯一的入口(用 ‘S’ 表示),和唯一的宝藏地点(用 ‘T’ 表示)。但是,宝藏被一些隐蔽的机关保护了起来。在地图上有若干个机关点(用 ‘M’ 表示),只有所有机关均被触发,才可以拿到宝藏。 要保持机关的触发,需要把一个重石放在上面。迷宫中有若干个石堆(用 ‘O’ 表示),每个石堆都有无限个足够触发机关的重石。但是由于石头太重,我们一次只能搬一个石头到指定地点。 迷宫中同样有一些墙壁(

qq_16016913的博客 275

一中OJ #1735 藏宝图 | 棋盘Multi_SSP 多源最短路径 BFS | 解题报告

一中OJ | #1735 藏宝图 时限 1000MS/Case 内存 64MB/Case 题目描述 现在有一张藏宝图,类似一个迷宫,其中有一些障碍物(从一个无障碍格子可以上下左右走到相邻的无障碍格子中)。手动清除不同的障碍物耗时可能不同。图中的某一点藏有宝藏。有些点不可通过。在边界上有一些入口,有的入口会提供若干

成海圣奈的8:07 772

分支限界问题

本篇为不想写实验报告的产物,写题解比报告难多了但是有意思多了。

2302_80236366的博客 1725
上一篇: 计蒜客-连连看(dfs)
下一篇: 计蒜客-蒜头君下棋(找规律)
Guuuuuu老师儿
博客等级 码龄9年 259粉丝 718原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值