博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
马的遍历进阶版--骑士巡游(添加了评估函数)[Teaks & xgluxv & r]
阅读量:6080 次
发布时间:2019-06-20

本文共 694 字,大约阅读时间需要 2 分钟。

上周发布了一个简单的马的遍历程序,由于方法不太好,无法有效的解决骑士巡游问题。这次发布的方法则可以在可容忍的时间范围内解决该问题,并且也大幅度提高了非巡游路线的搜索速度,可谓马的遍历进阶版。

所谓骑士巡游问题,即在马的遍历基础上,要求马在踏遍国际象棋棋盘后,如果再走一步,可以回到原出发点,那么本次遍历的路线即满足骑士巡游的要求。
骑士巡游问题其实就是一个哈密尔顿环问题。盲目搜索的话,代价比较大,很久都得不到结果。所以本次的方法中添加了评估函数(Navigator函数),具体方法就是查看下一步的所有候选点中,哪个点所能行动方向最少,那么就优先考虑这个点。这样往后走的时候,剩下的点拥有尽可能多的方向选择,更少机会被堵死,从而可以更快的找到有效解。
呵呵,这个方法是前人研究手工解决骑士巡游问题得到的方法,用纸笔都可解决,更何况用计算机穷搜^_^。
大家同样可下载到C++和C#两个版本的代码,他们所实现的算法是一致的,搜索过程也是完全一样的。
关于用这个算法测试C++和C#的性能问题,我认为不是很全面,毕竟算法只是使用了语言的一小部分功能,故不能完全体现两者的差异,只能大致看一下双方的执行效率。
在我的机器上,C++和C#版(都是Release版)以(0, 0)点为起点搜索到100000条骑士巡游路线(1530348条马的遍历路线)的执行时间大致分别是273.764秒和819.778秒,比值约为1:3。这个比值对于商业软件也许不至于有太多影响,但如果是做游戏的话,可就要好好考虑考虑了。
(vs2005工程文件。C++项目为Win32控制台项目,C#项目基于.Net 2.0)

转载地址:http://ajhgx.baihongyu.com/

你可能感兴趣的文章
Mybatis学习——一对一关联表查询
查看>>
Linux kernel模块管理相关详解
查看>>
电量与电压 ,内阻与电压的关系;
查看>>
激活窗体
查看>>
iOS开发--使用RSA加密
查看>>
Linux模式设计系列( 内核与应用关联思考)
查看>>
【C#】1.3 WPF应用程序学习要点
查看>>
java 短信验证码===随机数
查看>>
Windows Server 2008 计划任务配置(任务计划程序)每分钟执行BAT
查看>>
【VNC】Linux环境VNC服务安装、配置与使用
查看>>
动态创建地图文档MXD并发布地图服务
查看>>
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
查看>>
单例模式讲解
查看>>
Linux权限管理(笔记)
查看>>
(笔记)电路设计(二)之串联匹配电阻的应用
查看>>
Linux下的grep搜索命令详解(二)
查看>>
C 基本语法
查看>>
Codeforces Round #258 (Div. 2) A. Game With Sticks 水题
查看>>
Server 2008 R2 事件查看器实现日志分析
查看>>
解决Cookie乱码问题
查看>>