HDU1885——Key Task

HDU 1885 Key Task (带门和钥匙的迷宫搜索 bfs+二进制压缩) 传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1885 Key Task Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2654    Accepted Submission(s)... 阅读详情

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1885

Key Task


题目大意:*代表起点,X代表终点,B,Y,R,G分别代表四个门,b,y,r,g分别代表四把钥匙,只有拿了钥匙,才能开相应的门。问你最后能否达到终点,能输出最小步数,不能输出“The poor student is trapped!”。

解题思路:对于四把钥匙,可以使用状态压缩,开个三维数组做下标记,然后就用平常的bfs求解即可!!!

#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<cctype>
#include<algorithm>
#define INF 0xfffffff
using namespace std;

struct node
{
    int x,y,step;
    int key;
};

int r,c;
char maze[110][110];
int vis[110][110][30];
int dx[]={-1,0,1,0},dy[]={0,-1,0,1};
char door[]={'B','Y','R','G'};
char key[]={'b','y','r','g'};
int minn;

void bfs(int x,int y)
{
    int i,j,k;
    queue<node> Q;
    node p,q;
    p.key=p.step=0;
    p.x=x;p.y=y;
    vis[x][y][p.key]=1;
    Q.push(p);
    while(!Q.empty())
    {
        p=Q.front();
        Q.pop();
        if(maze[p.x][p.y]=='X')
            minn=min(minn,p.step);
        for(i=0;i<4;i++)
        {
            q.x=p.x+dx[i];
            q.y=p.y+dy[i];
            q.step=p.step+1;
            q.key=p.key;
            if(q.x<0||q.x>=r||q.y<0||q.y>=c||maze[q.x][q.y]=='#')
                continue;
            if(isupper(maze[q.x][q.y])&&maze[q.x][q.y]!='X')
            {
                for(j=0;j<4;j++)
                {
                    if(maze[q.x][q.y]==door[j])
                    {
                        if(q.key&(1<<j))
                        {
                            if(!vis[q.x][q.y][q.key])
                            {
                                vis[q.x][q.y][q.key]=1;
                                Q.push(q);
                            }
                            break;
                        }
                    }
                }
            }
            else if(islower(maze[q.x][q.y]))
            {
                for(j=0;j<4;j++)
                {
                    if(maze[q.x][q.y]==key[j])
                    {
                        if((q.key&(1<<j))==0)
                            q.key+=(1<<j);
                        if(!vis[q.x][q.y][q.key])
                        {
                            vis[q.x][q.y][q.key]=1;
                            Q.push(q);
                        }
                    }
                }
            }
            else
            {
                if(!vis[q.x][q.y][q.key])
                {
                    vis[q.x][q.y][q.key]=1;
                    Q.push(q);
                }
            }
        }
    }
}

int main()
{
    while(scanf("%d%d",&r,&c),r+c)
    {
        int i,j,ans=0;
        minn=INF;
        for(i=0;i<r;i++)
            scanf("%s",maze[i]);
        memset(vis,0,sizeof(vis));
        for(i=0;i<r;i++)
            for(j=0;j<c;j++)
            {
                if(maze[i][j]=='*')
                {
                    bfs(i,j);
                    break;
                }
            }
        if(minn==INF)
            printf("The poor student is trapped!\n");
        else
            printf("Escape possible in %d steps.\n",minn);
    }
    return 0;
}



智警杯1.4---excel可视化 知识点 阅读详情

相关推荐

正交试验实战指南:从PICT工具到混合水平表应用

本文详细介绍了正交试验法在测试设计中的实战应用,从基础概念到PICT工具的高级使用技巧。通过混合水平表设计和工程化实践案例,帮助测试工程师高效解决参数组合爆炸问题,提升测试覆盖率与效率。特别适合兼容性测试和复杂系统验证场景。

weixin_29230865的博客 259

hdu 1885

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

skyline 1027

wps js宏获取工作簿、工作表、单元格的值、链接转图片、单元格区域数据转二维数组、保存工作簿的常用Excel操作

wps js宏入门看这里,我写了常用的js操作Excel的方法:获取工作簿对象、获取工作表对象、获取单元格的值、链接转图片、生成条形码图片、单元格区域数据转二维数组方法、保存工作簿、弹出输入框、YesNo选择框,助你从VBA转战JS。

huaermeier的博客 3万+

hdu 1885 Key Task

怕是寒假做不完搜索1了......题目:The Czech Technical University is rather old — you already know that it celebrates 300 years of its existence in 2007. Some of the university buildings are old as well. And the nav...

Apale_8的博客 396

【Office激活】学校正版Office已激活成功仍弹出激活窗口

学校正版Office激活问题:已激活成功仍弹出激活窗口

ESCM_的博客 1万+

【Bluetooth蓝牙开发】一、开篇词 | 打造全网最详细的Bluetooth开发教程

1、开篇词 2、蓝牙开发入门 3、蓝牙协议栈总览 4、蓝牙协议栈——物理层 5、蓝牙协议栈——链路层 6、蓝牙协议栈——传输层 7、蓝牙协议栈——L2CAP协议 8、蓝牙协议栈——ATT协议 9、蓝牙协议栈——GATT协议 10、蓝牙通信流程分析 11、蓝牙协议栈——Bluez交叉编译 12、蓝牙调试工具汇总

Donge's Blog 1万+

hdu 1885 Key Task【状压搜索】

Key Task Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1824    Accepted Submission(s): 772 Problem Description The Czech Technica

mengxiang000000 600

034、MLCA 多尺度局部上下文注意力的 YOLOv11 适配:轻量级金字塔式空间上下文聚合

本文介绍了一种将多尺度局部上下文注意力(MLCA)模块集成到YOLOv11模型中的方法,以解决小目标检测中空间信息丢失的问题。MLCA采用金字塔式局部上下文聚合策略,通过不重叠的网格划分实现轻量级空间注意力计算,相比全局注意力机制能更好地保留小目标特征。 作者详细记录了实现过程,包括模块定义、参数调优和训练技巧,特别指出避免使用BN而改用GroupNorm以提升训练稳定性。在VisDrone数据集上的实验表明,MLCA-YOLOv11在参数量和计算量基本不变的情况下,mAP提升2.5%,其中行人检测提升3.

sundong_81的博客 278

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

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

AClion的专栏 1101

从原理到落地:Java+TensorRT打造YOLO模型GPU极致推理方案

Java+TensorRT的YOLO模型GPU加速方案,核心是通过JNI桥接实现Java与TensorRT的高效交互,结合TensorRT的底层优化能力,最大化GPU算力。该方案既保留了Java后端的工程化优势(如易维护、生态完善),又解决了AI模型推理的性能瓶颈,可落地于实时视频分析、智能监控、工业质检等场景。基于TensorRT Dynamic Shape实现多尺寸输入的自适应优化;结合Java的协程(Virtual Thread)提升异步推理的并发效率;

2601_94871597的博客 765

TSP:车为什么能和云端交互?

TSP:车为什么能和云端交互?

天赐好车的博客 410

Key Task HDU - 1885

Key Task HDU - 1885

weixin_29216119的博客 770

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

HDU 1885 Key Task

Problem Description The Czech Technical University is rather old — you already know that it celebrates 300 years of its existence in 2007. Some of the university buildings are old as well. And the na...

CHL的博客 261

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

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

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

hdu 1885【Key Task】

广搜 要记录方格里面不同状态时行走的步数 注意当当前行走的步数大于记录的步数时要剪枝(当然,在记录方格不同状态时的值不为-1时) 代码如下: 1 #include <iostream> 2 #include <cstring> 3 #include <queue> 4 using namespace std; 5...

aoyuan4706的博客 134

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

HDU-1885-Key Task

这个题是BFS,当时没做出来(题意理解有问题),后来知道题中的钥匙和门只有4种,就可以用BFS解决了,只是最后多记录一个当前有的钥匙的状态值去重即可。 代码: #include #include #include #include using namespace std; const int maxn=111; struct node { int x; int y; i

z309241990的专栏 1490

hdu 1885 key task (搜索)

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

ilsswfr 425

HDU 1885 —— Key Task 状压BFS

原题:http://acm.hdu.edu.cn/showproblem.php?pid=1885 题意:问从*到X至少走几步;     ’ # ‘ 是墙,’ . ‘ 是空地;大写字母是门,小写字母是钥匙,字母相同才可配对,如 b 开 B ,且钥匙一直都在并非开完一扇门钥匙就失效了; 思路:手里拥有钥匙的状态,状压一下,每次走到一个点,判断在已拥有的钥匙的状态下这个点是否走过 vis

0x3f3f3f3f 398

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

hdu 1885 Key Task(bfs)

http://acm.hdu.edu.cn/showproblem.php?pid=1885 再贴一个链接http://blog.youkuaiyun.com/u013081425/article/details/21756237 #include #include #include #include #include #include #define LL long long #defi

1265

HDU - 1885 Key Task

HDU - 1885 Key Task

LP_Cong 499
上一篇: HDU3339——In Action
下一篇: ZOJ2104——Let the Balloon Rise
yphacker
博客等级 码龄12年 199粉丝 540原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值