人工智能 八数码C#版 课设报告
-
需求分析
-
软件范围陈述
这是一个八数码游戏,用户可以随机产生一组1~8的数字显示在棋盘上,然后可以选择自己玩,也可以让计算机计算出最短路径,显示出移动步骤和访问节点个数并可以选择自动演示。用户可以选择让计算机用广度优先与A*算法计算最短路径。
-
软件功能描述
-
随机产生8个不同的数字
-
用户可以通过点击来移动棋盘数字
-
使用广度优先计算最短路径
-
使用A*算法计算最短路径
-
计算后显示最短路径移动步骤
-
自动演示移动步骤
-
可以手动选择观看最短路径步骤中的某个步骤
-
-
软硬件环境
硬件环境:
CPU:PII400MHZ以上
内存:128MB以上
分辨率:800*600以上
软件环境:
.NET Framework 2.0以上的平台
-
系统设计
-
系统总体设计:
总体UML图
-
系统详细设计
结点定义类:
枚举类型定义
产生随机数的类 和 A*算法用的自动排序OPEN表
核心算法类,包括广度优先和A*算法
扩展最大深度
总体结构与函数的作用在截图中的已经指明,现在分析一下核心算法
广度优先算法:
通过两个函数来完成,一个是扩展
扩展函数中先判断结点是否打到目标,达到目标则返回,否是则若位访问过结点就放入open表中。
broad函数汇总调用扩展函数,将每个结点扩展,直到它返回打到目标。
A*算法:
在广度优先的基础上,加入的估价函数,使用的是求出没个不同的数字距离目标的步数之和加上展开的层数作为估价值。
-
实现
-
随机数模块:
随机产生棋盘,并判断是否有解
-
求解模块
使用广度优先 与 A* 算法 求解,并将结果显示在右侧listBox中
-
手动游戏模块
可以通过点击棋盘,移动数字,来手动玩。
-
演示模块:
主要分为两种,一种是通过点击演示按钮来演示
另一种,通过点击listBox中的步骤,显示某步的棋盘
-
评价
该体统整体功能按要求实现了,较好的完成了老师要求的任务
缺点:界面不够美观,由于时间仓促,制作较为简陋,只实现了老师要求的功能。
-
参考文献
-
判断随机的棋盘是否可解
先复习线性代数中逆序数的概念,举例说明,线性代数书P5页例4,一组数中,如32514,
3排在首位,逆序数为0
2的前面比2打的数有(3),故逆序数为1
5是最大数,逆序数为0;
1的前面比1大的数有三个(3,2,5),故逆序数为3;
4的前面比4大的数有一个(5),故逆序数为1,于是这个排列的逆序数为t=0+1+0+3+1=5
2.通过上面的概念易证明两个状态如果可达,则他们的逆序数的奇偶性相同
- 附录
-
核心代码:
源代码下载地址:http://www.codeplex.com/eightnum/Release/ProjectReleases.aspx?ReleaseId=18551
|
||
Everyday is lonely day. |
|