目录
1 任务描述
2 问题建模
2.1 状态空间
3 算法设计和实现
3.1 数据组织结构
3.2 搜索算法
3.2.1 暴力搜索(for 循环)
3.2.2 深度优先搜索
3.2.3 算法性能对比
3.3 等式处理算法
3.4 数据库类
4UI 设计和使用说明
4.1 编译和运行环境
4.2 运行方式
4.2 界面设计
(1)开始界面
(2)游戏主界面
5 实验总结
5.1 项目亮点
(1)功能齐全,界面美观
(2)连接数据库
5.2 存在的问题及可改进之处
(1)等式局限性
(2)移动两根火柴的 dfs 算法实现
5.3 心得体会
6 参考文献
1 任务描述
使用火柴棍可以搭出如下图所示的等式,编写搜索算法程序,移动一根火柴使等式成立。
主要任务如下:
(1)允许在一个固定的等式库(两位数以内的加减乘法)中选择,从而给出答案;
(2)允许使用者自己定义,或者输入一个可以求解的等式。如果无解,回答无解;
(3)给出更多的题目和答案;
(4)(选)允许移动 2 根火柴棍;
(5)(选)给出从等式变为新的等式的题目和难度。
2 问题建模
2.1 状态空间
对于本次火柴棍移动问题(必做),参照状态空间表示法给出以下定义:
○ 1 状态:等式 x 中每个字符移动一根火柴(加、减、自身移位)可能变成的所有等式
○ 2 初始状态:原始等式 x
○ 3 目标状态:由原等式 x 移动一根且成立的等式
○ 4 转换操作:按照移动一根的规则更换等式中某个字符,获得新的等式
○ 5 代价函数:生成一个新等式移动的火柴根数(或移动操作总权值)选做中移动两根与上述类似;
考虑一个等式 x,假设 x 由五个字符组成(如 6+4=4),将每个字符看作一个格点,格点之间有路径相连,每条路径包含上一格点字符可能变成的新字符,如下图所示,搜索时遍历从起始字符到末位字符的所有路径,找出使等式成立且仅移动了一根火柴的全部路径。