问题描述就不写了.
算法思想:
基本思想:利用栈实现深搜,每次入栈一个跳点,走到终点或者没有可跳点则退栈一个,继续深搜.
聪明的改进:给这个过程加入一个贪心策略,每次选择周边跳点时, 贪心优先选择一个出口最少的跳点.
这里说的出口是指能够跳到的邻接跳点的数量,当前位于(1,1)的话,可以用好几个跳点,从这些跳点中选出一个这些跳点可选择周边跳点最少的跳点. 贪心的原因据说是因为: 优先选择出口少的点,就可以先把一些遗漏的格子补满, 使得最后剩下的没跳过的点比较多而且密集,这样能最终全跳满的概率就非常大,甚至整个算法只需要入栈64次0回溯直接找到一个路径.
每个栈结点保存了当前点坐标,贪心选择跳点的数组,记录已走过的跳点的计数量,当所有邻接跳点都走过,则出栈,否则继续取没走过的邻接跳点深搜.
代码写的还稍微有点庞杂,不知道对你有没有帮助.