BFS+状态压缩 hdu-1885-Key Task

STM32F407硬件IIC驱动OLED避坑实录:从‘不显示’到‘稳定刷屏’的完整调试过程 本文详细记录了使用STM32F407硬件IIC驱动OLED屏幕的完整调试过程,从初始的‘不显示’问题到最终实现‘稳定刷屏’。文章涵盖了硬件接线、I2C外设配置、常见问题排查及性能优化技巧,特别针对STM32标准库开发中的难点提供了实用解决方案,是嵌入式开发者驱动OLED屏幕的实用指南。 阅读详情
题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=1885

题目意思:

给一个矩阵,给一个起点多个终点,有些点有墙不能通过,有些点的位置有门,需要拿到相应颜色的钥匙才能打开,问到达终点的最短步数。

解题思路:

BFS+状态压缩。

将每种颜色对应一个二进制数位,1表示已经得到该颜色的钥匙,0表示没有得到。

一把钥匙可以同种颜色的多扇门。

代码:

#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<stack>
#include<list>
#include<queue>
#define eps 1e-6
#define INF 0x1f1f1f1f
#define PI acos(-1.0)
#define ll __int64
#define lson l,m,(rt<<1)
#define rson m+1,r,(rt<<1)|1
//#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;

/*
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
*/

map<char,int>myp1,myp2;

bool vis[20][110][110];
char save[110][110];
int n,m,dir[4][2]={{-1,0},{0,1},{1,0},{0,-1}};

struct Point
{
   int x,y,step,ss;
}s;

bool iscan(int x,int y)
{
   if(x<1||x>n||y<1||y>m||save[x][y]=='#')
      return false;
   return true;
}
//一把钥匙可以开颜色相同的多种锁
void bfs()
{
   memset(vis,false,sizeof(vis));
   s.step=0,s.ss=0;
   queue<Point>myq;

   myq.push(s);
   vis[0][s.x][s.y]=true;
   while(!myq.empty())
   {
      Point tmp=myq.front();
      myq.pop();

      int xx,yy;

      for(int i=0;i<4;i++)
      {
         xx=tmp.x+dir[i][0],yy=tmp.y+dir[i][1];
         if(!iscan(xx,yy))
            continue;
         if(save[xx][yy]=='X')
         {
            printf("Escape possible in %d steps.\n",tmp.step+1);
            return ;
         }

         int tt=tmp.ss;
         if(myp1.find(save[xx][yy])!=myp1.end()) //得到一把钥匙
         {
            tt=tt|(1<<myp1[save[xx][yy]]);
            if(vis[tt][xx][yy]) //该状态之前已被访问
               continue;
         }
         else if(myp2.find(save[xx][yy])!=myp2.end())
         {
            if(!(tt&(1<<myp2[save[xx][yy]]))) //没有钥匙
               continue;
         }
         if(vis[tt][xx][yy])
            continue;
         vis[tt][xx][yy]=true;
         Point t;
         t.x=xx,t.y=yy,t.ss=tt,t.step=tmp.step+1;
         myq.push(t);
      }
   }
   printf("The poor student is trapped!\n");
   return ;
}

int main()
{
   myp1['b']=0,myp1['y']=1,myp1['r']=2,myp1['g']=3; //每种不同的颜色对应不同的数位
   myp2['B']=0,myp2['Y']=1,myp2['R']=2,myp2['G']=3;

   while(scanf("%d%d",&n,&m)&&m+n)
   {
      memset(vis,false,sizeof(vis));
      for(int i=1;i<=n;i++)
      {
         scanf("%s",save[i]+1);
         for(int j=1;j<=m;j++)
         {
            if(save[i][j]=='*')
               s.x=i,s.y=j;
         }
      }
      bfs();
   }

   return 0;
}





Qt 国产嵌入式操作系统实现文字转语音功能(ekho库) Qt 国产嵌入式操作系统实现文字转语音功能(TTS)_tts驱动 转文字-优快云博客在继上篇文章之后,甲方粑粑不满意使用eSpeak发出的声音太难听了,这就不得不找个替代品,声音稍微好听了一些。使用ekho开源库。Ekho(余音)是一个免费、开源的中文语音合成软件。它目前支持粤语、普通话(国语)、诏安客语、藏语、雅言(中国古代通用语)和韩语(试验中),英文则通过Festival间接实现。Ekho支持Linux、Windows和Android平台。 阅读详情

相关推荐

【VAE学习笔记】全面通透地理解VAE(Variational Auto Encoder)

完整笔记:http://www.gwylab.com/note-vae.html 李宏毅老师的教程视频:https://www.bilibili.com/video/av15889450/?p=33 —————————————————————————————————   依据李宏毅老师的讲解,我整理了一番VAE的笔记。先简单介绍一下VAE,VAE作为一个生成模型,其基本思路是很容易理解的:把一堆真...

a312863063的博客 14万+

HDOJ1429(胜利大逃亡(续))

胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 611Accepted Submission(s): 213 Problem Description Ignatius再次被魔王抓走了(搞不懂他咋这...

weixin_30711917的博客 2340

保姆级教程:用PCAN-View监控汽车CAN总线,从硬件连接到报文分析(附快捷键大全)

本文提供了一份详细的PCAN-View使用教程,涵盖从硬件连接到报文分析的全流程,特别适合汽车电子工程师和初学者。内容包括硬件准备、软件安装、核心功能操作、高级技巧及故障排查,并附有实用的快捷键大全,帮助用户高效监控和分析CAN总线数据。

weixin_42542669的博客 498

WUST 1482 find clouds(bfs+状态压缩)

公主生气了,现在wh需要集齐 X 种云(帽子云,波浪云。。。)让公主开心。开始wh在一个迷宫的入口处,迷宫里恰好有 X 种云,每种云恰好只有一个。 wh每一步可以向上,向下,向左,向右走一步。请帮助wh计算最少需要走多少步收集到所有的云朵。由于wh有特殊 的技能,所以不用考虑wh该怎么走出去~

HJY 392

使用Intel编译器编译OpenFOAM

本文总结了使用INTEL编译器编译OpenFOAM的过程

姜蜉蝣的博客 1547

用STM32F407做个USB声卡:从CubeMX配置到播放录音全功能实战(附源码)

本文详细介绍了如何使用STM32F407开发板实现USB音频设备的全功能实战,包括CubeMX配置、硬件连接、音频流处理和性能优化。通过双缓冲DMA机制和音频数据处理流程,开发者可以构建高质量的USB声卡系统,适用于录音和播放场景。附源码,助力快速上手STM32音频开发。

weixin_30301449的博客 516

费解的开关(BFS+状态压缩)

PS:代码超时的,可惜。正解好像是DP,很好奇为什么DFS能卡过而BFS不行 题目链接:费解的开关 题目描述 你玩过“拉灯”游戏吗?25盏灯排成一个5x5的方形。每一个灯都有一个开关,游戏者可以改变它的状态。每一步,游戏者可以改变某一个灯的状态。游戏者改变一个灯的状态会产生连锁反应:和这个灯上下左右相邻的灯也要相应地改变其状态。 我们用数字“1”表示一盏开着的灯,用数字“0”表示关着的灯。下面这种...

小胡同的诗 499

25、BDS-3卫星信号性能与PPP-B2b增强消息完整性分析

本文对BDS-3卫星信号性能及PPP-B2b增强消息的完整性进行了系统分析。评估了MEO、IGSO和GEO卫星的轨道与时钟精度,得出BDS-3总体SISRE为0.25 m,系统完整性可覆盖99.999%的误差。分析表明SIS中断主要由时钟调整和轨道机动引起,个别卫星存在因境外监测受限导致的非计划中断。通过自研解码软件对PPP-B2b增强消息进行采集与解析,实验结果显示BDS-3和GPS的平均历元完整性率均高于98.55%,其中卫星掩码和时钟校正消息的完整性率超过99.8%。研究还发现IGSO卫星相比MEO卫

quiet的专栏 145

hdu1885 Key Task (bfs + 状态压缩)

其实没啥好说的,和hdu1429基本一样。。模板有了,代码改改就AC。。链接在此 题意:         有4个钥匙,有对应4种颜色的门,有各种墙。。。出口是X,注意可能有多个X。。 思路:         四个钥匙,状态压缩一小下,我写的可能有点乱,有点麻烦。。献丑了。。。 代码: #include #include #include #include #incl

671coder的专栏 2340

StarRC常见问题整理

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?使用starrc_cmd “错误代码”就能看对应Error或Warnning的解释。

m0_61544122的博客 3124

ABB机器人与S7-1200PLC实现位置坐标数据发送和接收的具体方法

ABB机器人与S7-1200PLC实现位置坐标数据发送和接收的具体方法

Robot_PLC_HMI_Automation 2917

HDU 1885 Key Task(状态压缩+BFS)

这道题和UVA上面的一道题目很类似,需要钥匙的题目,那道题是开关,也差不多。不同的是,那道题不需要走到需要关灯的房间就能控制,而这个需要走到门的位置。还有就是房间的表示是不一样的,那个是一维的这个是二维。 但是思想都是一样 题目:矩阵,有的地方有钥匙,有的地方有门,有的是墙,有的是起点还有终点,还有路。门必须用相应的钥匙可以打开。出口有多个,这个要注意。 第一次wa就是wa在这里了,因为,在

AClion的专栏 1101

解锁PyCharm+Deepseek:本地部署AI编程超能力

在本次探索中,我们成功地在 PyCharm 中实现了 DeepSeek 的本地化部署,这一过程虽然涉及多个步骤,但每一步都为我们开启 AI 编程大门奠定了基础。从安装最新版 PyCharm,确保我们拥有一个功能强大且兼容性良好的开发环境,到注册 DeepSeek 账号并获取 API Key,这是连接我们与强大 AI 能力的关键纽带。接着,在 PyCharm 中安装 Continue 插件并进行精细配置,让 DeepSeek 能够深度融入我们的编程流程。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 5550

hdu1885Key Task(状态压缩+bfs)

题目链接: 啊哈哈,点我点我 这题和hdu1429是姊妹题  请参见传送门 题目: Key Task Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1187    Accepted Submission(s):

大洋深处 978

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

HDU1885 Key Task(BFS状态压缩)

题目链接 题意: 输入R×C大小的地图,其中’*‘表示起点位置,’#‘表示不可以通过,’.'表示可以通过,‘B’,‘Y’,‘R’,'G’分别表示蓝、黄、红、绿门,‘b’,‘y’,‘r’,'g’分别表示蓝、黄、红、绿门的钥匙,'X’表示出口,注意输入数据可能含有零个或多个出口,可能含有多个相同颜色的门或钥匙,可能存在无匹配的钥匙\门的情况,要求计算从起点到终点的最短路径。 思路: 由于可能出现同...

Keep eating codes! 237

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Key Task HDU1885(状态压缩bfs)

Key Task Time Limit: 3000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2848Accepted Submission(s): 1221 Problem Description The Czech Technical Univ...

代码笔记本 248

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

HDU 1885 Key Task (状态压缩+BFS)

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1885 代码: #include #include #include #include using namespace std; struct node { int x,y; int temp,step; }ui,op; char maps[105][105]; int dis[

Pig_Me的博客 276

hdu 1885 Key Task bfs + 状态压缩

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1885 思路:有四把钥匙,有16种持有状态,每个点并不是只能走一遍,而是当钥匙持有状态不同时就可以走,有相同的钥匙状态走到相同的点认为是重复。于是开三维数组,其中一维标记钥匙状态,用位运算来计算很方便 #include #include #include #include #include u

弱智就要多努力 520

hdu 1885 Key Task(bfs+状态压缩)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1885 解题思路: 状态压缩,使用二进制分别存储每把钥匙是否拥有的状态,然后当遇到门时,查看此时相应的二进制位数上是否有相应的钥匙,如果有,则进队列,继续搜就行了。直到找到终点为止。。。 AC代码: #include #include #include #include usin

piaocoder 540

Hdu-1885-Key Task [状态压缩][bfs]

题目传送门只有四把钥匙, 使用2^4中状态可以表示,碰到门的时候,跟当前的key与一下就知道是否可以开门, 剩下的就是个简单的bfs, 注意不止有一个出口。 PS:代码写得真的挫。#include <algorithm> #include <iostream> #include <cstdlib> #include <cstring> #include <cstdio> #include <cma

裤头是叫裤头的裤头 387

HDU1885Key Task(状态压缩+BFS)

Key TaskTime Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 907    Accepted Submission(s): 334 Problem Description The Czech Technical Unive

crazy_石头的专栏 1256

HDU - 1885 Key Task (状态压缩BFS

三维BFS 第三维进行一个状态的压缩就行,,, 注意不止一个出口,我们要寻找的是最小的那个,因为这个原因被卡了一天,,, #include &lt;bits/stdc++.h&gt; using namespace std; #define CLR(a, b) memset(a,(b),sizeof(a)) const int INF = 0x3f3f3f3f; const int MAX...

Yishui_lovely 224

HDU1885 Key Task(BFS+状态压缩)

与HDU1429大致一样。 代码: #include #include #include #include #include using namespace std; const int MAX=100+10; struct point { int x,y,step,state; point(int x=0,int y=0,int step=0,int state=0):x(x

Keaper的博客 694

HDU 1885 Key Task(BFS + 状态压缩)

  做这个题的时候我给想简单了,还以为是个基础的广搜,后来发现搜索无法完成,因为vis的标记已经不能再使用了,因为一旦标记了,同一个结点不能走两次,而题目中有的时候有些点必须要走两次,甚至多次. 我就无从下手了,赛后看了题解才知道,每个点都有16个状态,用状态压缩可以来保存每个点的钥匙状态,开一个三维的vis数组就可以了,然后这就变成了普通的bfs...代码如下.   还有就是,在一开始的时候...

weixin_30547797的博客 115

HDU 1885Key Task(bfs + 状态压缩)

Key Task Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1529 Accepted Submission(s): 631Problem Description The Czech Technical Universit

qwesde 648
上一篇: BFS+状态压缩 hdu-1429 胜利大逃亡(续)
下一篇: BFS-hdu-1226-超级密码
Accagain
博客等级 码龄14年 376粉丝 316原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值