当前位置 : 主页 > 编程语言 > c语言 >

【内附源码和文档】基于C语言设计火柴棍移动

来源:互联网 收集:自由互联 发布时间:2023-09-06
基于C语言设计火柴棍移动 任务描述使用火柴棍可以搭出如下图所示的等式,编写搜索算法程序,移动一根火柴使等式成立。 主要任务如下: 允许在一个固定的等式库(两位数以内的加

基于C语言设计火柴棍移动

任务描述使用火柴棍可以搭出如下图所示的等式,编写搜索算法程序,移动一根火柴使等式成立。

【内附源码和文档】基于C语言设计火柴棍移动_搜索

主要任务如下:

允许在一个固定的等式库(两位数以内的加减乘法)中选择,从而给出答案;

允许使用者自己定义,或者输入一个可以求解的等式。如果无解,回答无解;

给出更多的题目和答案;

(选)允许移动 2 根火柴棍;

(选)给出从等式变为新的等式的题目和难度。

一、问题建模

1.1 状态空间

对于本次火柴棍移动问题(必做),参照状态空间表示法给出以下定义:

○1 状态:等式 x 中每个字符移动一根火柴(加、减、自身移位)可能变成的所有等式

○2 初始状态:原始等式 x

○3 目标状态:由原等式 x 移动一根且成立的等式

○4 转换操作:按照移动一根的规则更换等式中某个字符,获得新的等式

○5 代价函数:生成一个新等式移动的火柴根数(或移动操作总权值)选做中移动两根与上述类似;

考虑一个等式 x,假设 x 由五个字符组成(如 6+4=4),将每个字符看作一个格点,格点之间有路径相连,每条路径包含上一格点字符可能变成的新字符,如下图所示,搜索时遍历从起始字符到末位字符的所有路径,找出使等式成立且仅移动了一根火柴的全部路径。

【内附源码和文档】基于C语言设计火柴棍移动_权值_02

二、算法设计和实现

2.1 数据组织结构

算法的实现依托于数据结构的组织,首先介绍本程序中的数据组织。为了提升搜索效率,程序开始时,调用函数 _(),将等式中可能出现的所有字符(’0-9’ ‘+’ ‘-‘ ‘*’ ‘=’)移动一根火柴棍能变成的新字符存入一张表中,后续搜索只需要直接从表中查找即可。

整张表为结构体类型的二维数组,定义结构体_,包含移动权值 flag 和变成的字符 data,移动权值的复制规则见表 1. 则二维数组[][]中每一个元素都具有一个 flag 值和一个 data 字符,m 对应原始字符,n 对应原始字符变成的新字符序号,便于搜索算法的实现。

【内附源码和文档】基于C语言设计火柴棍移动_搜索算法_03

2.1.1 表 1 移动权值赋值规则

移动操作

不变

自身移动一根

加一根

减一根

Flag 值

0

1000

10

100

2.2 搜索算法

搜索算法是这次编程作业的核心部分,整体搜索流程如图 1 所示。本项目中笔者共设计和实现了两种搜索算法——暴力搜索(for 循环)和深度优先搜索(递归),两种算法本质上相似,但在表示和具体实现上又有所不同,搜索效率也有一定差异,分别讨论如下1。

【内附源码和文档】基于C语言设计火柴棍移动_权值_04

图 1 整体搜索流程

完整的源码和详细的文档,上传到了 【WRITE-BUG数字空间】,需要的请自取  

https://www.writebug.com/code/0c7e5270-c792-11ed-a130-6479f0e5e323/#

上一篇:C语言-第1章_导言-07
下一篇:没有了
网友评论