马踏棋盘+贪心启发搜索;第一次接触这么高级的搜索-,-;下一步准备学习双向广搜了;

来源:互联网 发布:开淘宝的保证金在哪退 编辑:程序博客网 时间:2024/06/07 11:26

 

 

问题描述就不写了.

 

算法思想:

基本思想:利用栈实现深搜,每次入栈一个跳点,走到终点或者没有可跳点则退栈一个,继续深搜.

聪明的改进:给这个过程加入一个贪心策略,每次选择周边跳点时, 贪心优先选择一个出口最少的跳点.

这里说的出口是指能够跳到的邻接跳点的数量,当前位于(1,1)的话,可以用好几个跳点,从这些跳点中选出一个这些跳点可选择周边跳点最少的跳点.   贪心的原因据说是因为: 优先选择出口少的点,就可以先把一些遗漏的格子补满, 使得最后剩下的没跳过的点比较多而且密集,这样能最终全跳满的概率就非常大,甚至整个算法只需要入栈64次0回溯直接找到一个路径.

 

每个栈结点保存了当前点坐标,贪心选择跳点的数组,记录已走过的跳点的计数量,当所有邻接跳点都走过,则出栈,否则继续取没走过的邻接跳点深搜.

 

代码写的还稍微有点庞杂,不知道对你有没有帮助.

 

 

原创粉丝点击