【POJ 2157】 Maze 解题报告

python_maze:一个迷宫生成和解题项目,用python编写 Python迷宫 maze.py - 迷宫生成和求解程序 版权所有 (C) 2014 Brendan Wilson 该程序是免费软件:您可以根据自由软件基金会发布的 GNU 通用公共许可证(许可证的第 3 版或(由您选择)任何更高版本)的条款重新分发和/或修改它。 分发此程序是希望它有用,但不作任何保证; 甚至没有对适销性或针对特定目的的适用性的暗示保证。 有关更多详细信息,请参阅 GNU 通用公共许可证。 您应该已经收到一份 GNU 通用公共许可证以及该程序。 如果没有,请参阅 。 这是一个使用 Python 2.7.6 构建的迷宫生成和解决项目。 要运行它,我建议在包含程序文件的文件夹中打开一个终端,然后调用 python maze.py 这将打开迷宫窗口,但此时所有交互仍使用终端窗口完成,因此请确保该窗口可见。 程序会问你想要迷宫有多“循环”,或者用技术术语来说,图形包含 立即下载

题目大意是给你一张n×m的迷宫,大写字母A-E代表的是门,小写字母a-e对应的是其大写字母门的钥匙,如果一扇门在一张图里有多个钥匙,那么必须都找到这些钥匙才能打开这扇门,X代表是墙壁,‘.’代表此处为空可以行走,询问是否可以从S走到G。

刚开始思路想错了,想着一个点最多被访问4次,然后就自信的写完了,手出了组数据,好像不大对。。然后就开始想想想,最后还是没有想到什么比较好的搜索方式,,只能看题解了。看了黄学长的博客,恍然大悟(智商太低了),这道题不用回溯,每个点访问一遍就行,如果找到一扇门的所有钥匙且可以走到这扇门前,就直接蹦到门的坐标再dfs,因为不可能出现两个A门这种情况,所以不用担心出错。

还是要多练练搜索啊!!

代码如下

/*My convictions will not falter.*/
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
const int N=25,M=6;
const int movx[5]={0,-1,0,1,0},movy[5]={0,0,1,0,-1};
int num[M],key[M],s[N][N],sx,sy,gx,gy,can,dorx[M],dory[M];
int vis[N][N],pd[M];
void read(int x,int y)
{
    char c;
    for(int i=1;i<=x;i++)
    {
      int j=1;
      while(j<=y)
      {
      c=getchar();
      if(c>='A'&&c<='E') s[i][j]=c-'A'+1,dorx[c-'A'+1]=i,dory[c-'A'+1]=j,j++;
      else if(c>='a'&&c<='e') s[i][j]=c-'a'+6,key[c-'a'+1]++,j++;
      else if(c=='.') s[i][j]=0,j++;
      else if(c=='X') s[i][j]=-1,j++;
      else if(c=='S') s[i][j]=11,sx=i,sy=j,j++;
      else if(c=='G') s[i][j]=12,gx=i,gy=j,j++;
      }
    }
    return ;
}
void dfs(int x,int y)
{
    vis[x][y]=1;
    for(int i=1;i<=4;i++)//上下左右四个方向
    {
        int tx=x+movx[i],ty=y+movy[i];
        if(!vis[tx][ty]&&s[tx][ty]>=1&&s[tx][ty]<=5) 
        {
        pd[s[tx][ty]]=1;//此扇门可以到达
        if(num[s[tx][ty]]==key[s[tx][ty]]&&key[s[tx][ty]])
        dfs(tx,ty);
        if(can) return;
        }
        else if(!vis[tx][ty]&&s[tx][ty]>=6&&s[tx][ty]<=10) 
        {num[s[tx][ty]-5]++;dfs(tx,ty);
        if(num[s[tx][ty]-5]==key[s[tx][ty]-5]&&key[s[tx][ty]-5]&&pd[s[tx][ty]-5]) dfs(dorx[s[tx][ty]-5],dory[s[tx][ty]-5]);
        if(can) return;}
        else if(!vis[tx][ty]&&s[tx][ty]==0)
        {dfs(tx,ty);if(can) return;}
        else if(tx==gx&&ty==gy) {can=1;return;}
    }
}
int main()
{
    int n,m;
    memset(s,-1,sizeof(s));
    do
    {
    scanf("%d%d",&n,&m);
    if(m==0&&n==0)break;
    read(n,m);
    can=0;
    dfs(sx,sy);
    if(can) printf("YES\n");
    else printf("NO\n");
    memset(s,-1,sizeof(s));//数组清零
    memset(vis,0,sizeof(vis));
    memset(key,0,sizeof(key));
    memset(num,0,sizeof(num));
    memset(dorx,0,sizeof(dorx));
    memset(dory,0,sizeof(dory));
    memset(pd,0,sizeof(pd));
    }while(1);
    return 0;
}
Qt 文件对话框(QFileDialog)实战指南 —— 从基础到高级应用 本文是Qt文件对话框(QFileDialog)的实战指南,从基础静态函数调用到高级对象模式应用,全面解析了文件选择、保存、目录选取及多选等核心功能。文章深入探讨了MIME类型过滤、自定义侧边栏、信号槽实时响应及状态持久化等高级技巧,并提供了跨平台开发中的避坑指南与最佳实践,帮助开发者高效、稳健地集成文件操作功能。 阅读详情

相关推荐

AppStore逆向分析:从网络抓包到自动化模拟的完整实践

在移动应用生态中,理解客户端与服务器之间的通信协议是进行自动化测试、数据分析和系统集成的关键技术基础。通过分析网络请求与响应,可以深入理解认证、会话管理和数据交换的原理,这对于构建稳定的自动化流程至关重要。其技术价值在于能够实现合法场景下的流程模拟,例如应用元数据监控、沙盒环境测试或内部工具开发。在实际应用场景中,开发者常需处理登录态维持、请求签名验证及风控策略应对等挑战。本文聚焦于AppStore这一封闭生态,详细拆解了其登录、查询等核心环节的通信机制,并探讨了使用Python结合抓包工具进行安全逆向分析

weixin_42524171的博客 926

noi--1159:Maze(bfs)

1159:Maze描述 Acm, a treasure-explorer, is exploring again. This time he is in a special maze, in which there are some doors (at most 5 doors, represented by ‘A’, ‘B’, ‘C’, ‘D’, ‘E’ respectively

神回 640

AOI检测总误判?五大常见问题与实战解决方案

通过对图像质量、检测程序、外界干扰、算法优化以及设备维护和校准的全面把控,企业可以有效降低误判率,提升AOI检测的准确性和可靠性,为工业生产提供更有力的质量保障。表现描述:在AOI检测时,元器件字符因印刷颜色深浅、模糊或受到灰尘干扰等差异,再加上元件库参数未根据实际生产优化,会使系统误将合格元件判定为不合格,严重影响生产效益和产品质量。优化元件库:着重检测关键差异字符,如型号编码等关键信息,剔除不必要字符的检测项,减少干扰,专注于关键识别的准确性。检测时,根据物料信息动态更新检测参数,使系统适应物料变化。

ALeader_AOI的博客 3494

【搜索】B041_openj_maze 寻找钥匙与宝藏(暴力 bfs / Flood Fill)

一、Problem Acm, a treasure-explorer, is exploring again. This time he is in a special maze, in which there are some doors (at most 5 doors, represented by ‘A’, ‘B’, ‘C’, ‘D’, ‘E’ respectively). In orde...

无敌兔0x01 538

光耦合MOSFET(Optocoupled MOSFET,简称OCMOS)

光耦合MOSFET(Optocoupled MOSFET,简称OCMOS)是一种将光电耦合器和MOSFET结合在一起的器件,用于实现电气隔离和信号传输。选择合适的光耦合MOSFET时,还需要考虑具体应用的需求和环境条件,以确保最佳性能和可靠性。- 最大输出电流和电压:确保所选型号能够满足电路的最大电流和电压需求。- 最大输出电流和电压:确保所选型号能够满足电路的最大电流和电压需求。- 隔离电压:根据应用环境的电气隔离要求选择合适的隔离电压。- 隔离电压:根据应用环境的电气隔离要求选择合适的隔离电压。

eydj2008的专栏 1725

Rocky Linux 9 远程桌面配置全攻略:从零搭建XRDP服务(含防火墙设置)

本文提供了在Rocky Linux 9上从零开始配置XRDP远程桌面服务的完整指南。详细介绍了系统准备、XRDP服务安装、防火墙与SELinux安全设置、多用户性能优化以及多平台客户端连接实测。重点解决了使用Windows远程桌面协议(RDP)连接Rocky Linux时常见的配置难点与安全问题,帮助用户获得稳定高效的图形化远程访问体验。

vodka的博客 646

2.5基本算法之搜索迷宫题翻译

Maze 2000ms65536K 描述: Acm, a treasure-explorer, is exploring again. This time he is in a special maze, in which there are some doors (at most 5 doors, represented by 'A', 'B', 'C', 'D', 'E' respectively). In order to find the treasure, Acm may need t...

Abby_yyyyyyy的博客 246

iOS安全和逆向系列教程 第18篇:iOS应用脱壳技术详解与实战

iOS应用脱壳技术详解与实战 摘要: 本文深入剖析了iOS应用脱壳技术,首先解释了加壳(如FairPlay DRM)与脱壳的基本概念及必要性。通过otool命令可以检测应用的加密状态。文章详细介绍了三种主流脱壳工具:经典dumpdecrypted工具的使用方法、现代化Clutch工具的安装配置以及基于Frida的高级脱壳方案frida-ios-dump。针对特殊情况,还提供了使用LLDB手动dump内存的技术细节,包括查找基地址、计算dump范围和内存读取等操作。最后介绍了修复Mach-O文件头的Pytho

一个自学不成材的程序员 710

回溯算法之迷宫问题(Maze)

回溯算法之迷宫问题前言算法思路一、回溯算法二、经典问题之迷宫问题(Maze)(一)问题阐述 前言     迷宫问题是回溯算法的经典问题 算法思路 一、回溯算法     回溯算法实际上是一个类似枚举的搜索尝试过程,主要是在搜素尝试过程中寻找问题的解,当发现已满足求解条件时,就“回溯”返回,尝试别的路径。     回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标,但当搜索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种不通就回退再走的技术称为回溯法,而满足回溯条件的某个状态的点称为“回

YING—country的博客 1万+

【Word提效 No.010】使用AI一键复制格式刷应用格式

本文介绍利用AI工具WorkBuddy实现Word文档格式批量复制的自动化解决方案。通过简单指令即可将指定段落的格式一键应用到多个目标段落,解决传统格式刷操作繁琐、易出错的问题。方案包含三步操作:准备文档、输入指令模板、验收效果,并提供多种场景的现成指令示例。该工具支持字体、段落等格式属性的批量复制,且不会覆盖原文件,适用于论文、手册等文档的格式统一需求。

u011186532的专栏 77

FLAC3D数值三轴测试

本文介绍了使用FLAC3D进行数值三轴测试的命令流程。通过建立圆柱体模型,设置Mohr-Coulomb本构模型及材料参数,施加边界条件和荷载,并定义Fish函数监测应变和应力。命令包括模型创建、网格划分、材料属性定义、边界约束、荷载施加以及结果监测等步骤。该流程可用于模拟岩土材料在三轴条件下的力学响应,为数值分析提供参考。完整代码可从指定链接下载获取。

qq_36980284的博客 99

POJ 2157 Maze DFS

POJ 2157 Maze炒鸡好的一道搜索题, 然而我并不会, 所以看得是 黄学长博客 才会做的。题意:给你一张图, n, m。由字符组成,’S’ 是起点, ‘G’ 是终点, ‘X’ 代表墙, ‘A’, ‘B’, ‘C’, ‘D’, ‘E’ 是门, ‘a’, ‘b’, ‘c’, ‘d’, ‘e’ 是门的钥匙。其中钥匙数至少为1个,收集地图上全部 ‘a’ 才可能 开启 ‘A’, 其他也一样。输出能否从

QER 的博客 456

30天Python入门(第一天:Python入门)

30天带你入门Python,这是第一天

Science prince的博客 583

[POJ2157]Maze(DFS)

题目链接:http://poj.org/problem?id=2157 题意:给一张地图,地图里有门和钥匙,想要开门必须集齐所有钥匙。给定起点和终点,问从起点出发能否到达终点。 爆搜floodfill,每填一次考虑是否到达终点,并且把门都开开,钥匙都拿上,再进行下一次,其实可以不重复200次,备份一下上一次的状态图,再比对floodfill后的与当前的是否不同即可。 1 #includ...

weixin_30445169的博客 155

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

POJ 2157 Maze

Maze Time Limit:2000MS Memory Limit:65536K Total Submissions:3183 Accepted:996 Description Acm, a treasure-explorer, is exploring again. This time he is in a specia...

weixin_30588907的博客 213

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

POJ-2157:Maze(特殊的bfs方式)

POJ-2157:Maze(特殊的bfs方式) 我有特殊的开门方式

污miao汪的博客 490

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

poj练习题的方法

poj1010——邮票问题 DFSpoj1011——Sticks dfs + 剪枝poj1020——拼蛋糕poj1054——The Troublesome Frogpoj1062——昂贵的聘礼poj1077——Eightpoj1084——Square Destroyerpoj1085——Triangle War(博弈,極大極小搜索+alpha_beta剪枝)poj1088——滑雪poj1129—...

weixin_30871293的博客 293

重走长征路---OI每周刷题记录---3月22日 2014

总目录详见https://blog.youkuaiyun.com/mrcrack/article/details/84471041 做题原则,找不到测评地址的题不做。2018-11-28 重走长征路---OI每周刷题记录---3月22日 2014 本周共计26题+1题 测评地址: 高精度: 1.「bzoj1263」整数划分 费用流: 2.「bzoj1221」软件开发 3.「bzoj242...

mrcrack的博客 574

1.21英文题面翻译

描述 Acm, a treasure-explorer, is exploring again. This time he is in a special maze, in which there are some doors (at most 5 doors, represented by 'A', 'B', 'C', 'D', 'E' respectively). In order to find the treasure, Acm may need to open doors. However, t

qq_64149314的博客 484

POJ-2157:Maze(特殊的bfs方式)

题目链接 Description Acm, a treasure-explorer, is exploring again. This time he is in a special maze, in which there are some doors (at most 5 doors, represented by ‘A’, ‘B’, ‘C’, ‘D’, ‘E’ respectively). In order to find the treasure, Acm may need to open doo

csyifanZhang的博客 360

1159:Maze

描述 Acm, a treasure-explorer, is exploring again. This time he is in a special maze, in which there are some doors (at most 5 doors, represented by ‘A’, ‘B’, ‘C’, ‘D’, ‘E’ respectively). In order to find the treasure, Acm may need to open doors. However, to

lzx's blog 526

搜索,Maze 题解

OPENJUDGE 1159:Maze 题目 描述 Acm, a treasure-explorer, is exploring again. This time he is in a special maze, in which there are some doors (at most 5 doors, represented by ‘A’, ‘B’, ‘C’, ‘D’, ‘E’ res...

cosvae的博客 395

poj 2157 Maze(迷宫)(BFS)

Description Acm, a treasure-explorer, is exploring again. This time he is in a special maze, in which there are some doors (at most 5 doors, represented by ‘A’, ‘B’, ‘C’, ‘D’, ‘E’ respectively). In

Loi_yuan的博客 1338

poj2157Maze(bfs,有门,需要先找钥匙)

Maze Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 3245   Accepted: 1022 Description Acm, a treasure-explorer, is exploring again. This time he is in a spe

一米阳光 1354

poj2157&&OpenJudge1159 Maze

Acm, a treasure-explorer, is exploring again. This time he is in a special maze, in which there are some doors (at most 5 doors, represented by 'A', 'B', 'C', 'D', 'E' respectively).

wumingshi 778

poj 2157 Maze 枚举排列+dfs搜迷宫

题意: 给一个迷宫,求是否可从S走到G,迷宫中有门课钥匙,要获得相应种类的所有钥匙才能打开该种门(比如获得所有a才能打开A)。 分析: 枚举打开门的顺序,搜路径即可。 代码: //poj 2157 //sep9 #include #include using namespace std; const int maxN=32; char maze[maxN][maxN]; char g[m

sepNINE的专栏 1215
上一篇: 【POJ 1986】 Distance Queries 解题报告
下一篇: 【Noi OpenJudge】 算24 解题报告
Mario_sz
博客等级 码龄10年 12粉丝 14原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值