骑士周游问题跳马问题C#实现(附带WPF工程代码)
骑士周游问题,也叫跳马问题。
问题描述:
将马随机放在国际象棋的8×8棋盘的某个方格中,马按走棋规则进行移动。要求每个方格只进入一次,走遍棋盘上全部64个方格。
代码要求:
1,可以任意选定马在棋盘上的起始位置,
2,计算并打印马跳的路线。
3,可以控制代码执行的速度
4,可以随时暂停开始程序
5,程序结束后可以打印代码
问题解决:
开发环境--vs2015 开发语言--c#
设计思想:建立8*8的int数组,存储棋盘当前状态。选择当前马的位置,按照深度优先搜索写一个递归函数按次序遍历马的八个下一步位置。
缺点:算法效率低(如果马跳的慢一点程序跑一宿都没有结果。ps:根据图论,8*8的跳马问题是一定有解的)
优化:优化马跳下一步的顺序,优先选择出路少的路径。比如可以往左上和右上跳,左上跳之后有3种选择,右上跳之后有2种选择,则选右上。
结果:除少部分点需要回溯,大部分基本可以一次寻找到解;
图形化预览界面:
设计思想:
对使用usercontrol实现简单的界面显示。设计思想改进,更好的设置应该是把每一个格子设计成一个
对象,将格子的线直接binding到数据集上,实现界面和业务的分离。然而只是个大作业懒得写的那么麻烦了,
符合实际需求才是最好的方案。
-------------------------------------------------------------------
工程链接地址:http://download.csdn.net/download/xueyudlut/10228599
笔者最近穷的很,想下载别人的资源却没积分。读者老爷想下资源的话,可以赏在下两个积分orz
本博客所有内容为原创,转载需征求作者同意。