从迷宫到回溯递归算法
发表于 | 更新于
CTF中经常有一些需要单字符或者双字符等情况的爆破问题在这类问题中,通过输入给定字符集$\alpha$中的元素,给程序黑盒进行黑盒测试,判断输出从而得到某些字符组合的可行性进而得出最后结果。这种方式不需要手写代码,而是直接借程序检查,写起来很方便。从另一个角度说,这一类型的题不要求理解代码逻辑,而是要求理解程序意义,即:看到检查九宫格可以联想到数独,看到wasd可以联想到迷宫。因此,这里从迷宫外推到相关算法,尝试给出固定解题模板。
迷宫1现在有一个二维迷宫,其中每个格子都是正六边形,已知起点和终点格id。字符集$\alpha = {a,b,c,d,e,f}$ 分别表示不同的方向,go方法接受字符集$\alpha$元素的组合(字符串),然后尝试从起点进行移动,每次移动时全部移动成功返回0,某步移动失败直接返回-1,某步到达终点直接返回1。要求得出最短路径。
迷宫2现在有一个链表Maze,每个节点结构为:
12345typedef struct Node{ PNode a; PNode b; PNode c;} node,*PNode;
a ...