迷宫问题中的dfs(进阶)
前言
我们在基础模板那篇文章中已经讨论了一个一般性的走迷宫使用的dfs模板,在这里我们依照WolvCTF的ej题目来讲解一下有较多限制的迷宫题目如何做。
ej 题目非迷宫部分的简单介绍
因为在这里我们只讨论迷宫部分的dfs,如果读者想做这道题可以找本人要。(笑)

这里是main函数的部分,可以看到题目的逻辑是这样的,首先输入一个字符串,这个字符串其实就是走迷宫所用的操作,然后经过一个判断,如果判断成功就输出”correct!“,然后用输入作为密钥解密密文,得到flag明文并输出,因此我们其实只需要保证第一个判断能够成功就可以了。
但是这里有一个问题就是,这个判断是走迷宫,但是这个走迷宫的方法不是唯一的,也就是说,我们需要找到所有的路径,然后挨着判断输出是否是真正的flag。
这个判断函数里面是一个走迷宫,这里将迷宫图案贴出来。
0 0 0 0 0 0 |
这里有三种情况,分别是0 ,1,2。
要求是这样的,0是可以走的,并且没有限制,起点是(0,0),终点也是(0,0)。
1是可以选择走或者不走,但是如果要走的话有限制,就是从1之前的位置来到1时选择的方向,从1之紧接着还要再走一次。举个例子,从坐标(2,1)走到(2,2)这个是1 的位置,是向右走,那么从(2,2)还要再向右走一次走到(2,3),其他方向不可以走。
2是必须要走的,走2的时候也有限制,从2之前来的最近的两次操作必须是一样的,在2这个位置必须拐弯,拐弯之后紧接着的两次操作也必须是一样的。比如如果从(2,4)这个位置要走到(4,4)这个位置,必须是往下走两个,然后拐弯,向左再走两个位置(这个和(4,3)坐标的1的限制并不冲突)
知道了迷宫的走法后,我们就可以来写dfs走迷宫了。
代码及其解析
|
在这里的dfs里面我们在要先将特殊的位置进行判断,之后再判断不特殊的位置
可以看到这里的代码套用的完全是上一篇文章的模板,即使是有1和2的限制,也逃脱不开模板
102个输出!
dddddrrrrruuuuulddddlluuuull 1 |
笔者挨着从第一个开始测试,终于到第92个的时候测试成功了,flag出现了
www,运气真差,www





