昆明理工大学 人工智能 实验一
- 格式:doc
- 大小:223.00 KB
- 文档页数:15
一、实验目的1. 了解机器学习的基本概念和常用算法。
2. 掌握使用Python编程语言实现图像识别系统的方法。
3. 培养分析问题、解决问题的能力。
二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.73. 开发工具:PyCharm4. 机器学习库:TensorFlow、Keras三、实验内容1. 数据预处理2. 模型构建3. 模型训练4. 模型评估5. 模型应用四、实验步骤1. 数据预处理(1)下载图像数据集:选择一个适合的图像数据集,例如MNIST手写数字数据集。
(2)数据加载与处理:使用TensorFlow和Keras库加载图像数据集,并进行预处理,如归一化、调整图像大小等。
2. 模型构建(1)定义网络结构:使用Keras库定义神经网络结构,包括输入层、隐藏层和输出层。
(2)选择激活函数:根据问题特点选择合适的激活函数,如ReLU、Sigmoid等。
(3)定义损失函数:选择损失函数,如交叉熵损失函数。
(4)定义优化器:选择优化器,如Adam、SGD等。
3. 模型训练(1)将数据集分为训练集、验证集和测试集。
(2)使用训练集对模型进行训练,同时监控验证集的性能。
(3)调整模型参数,如学习率、批大小等,以优化模型性能。
4. 模型评估(1)使用测试集评估模型性能,计算准确率、召回率、F1值等指标。
(2)分析模型在测试集上的表现,找出模型的优点和不足。
5. 模型应用(1)将训练好的模型保存为模型文件。
(2)使用保存的模型对新的图像进行识别,展示模型在实际应用中的效果。
五、实验结果与分析1. 模型性能:在测试集上,模型的准确率为98.5%,召回率为98.3%,F1值为98.4%。
2. 模型优化:通过调整学习率、批大小等参数,模型性能得到了一定程度的提升。
3. 模型不足:在测试集中,模型对部分图像的识别效果不佳,可能需要进一步优化模型结构或改进训练方法。
六、实验总结通过本次实验,我们了解了机器学习的基本概念和常用算法,掌握了使用Python编程语言实现图像识别系统的方法。
昆明理工大学信息工程与自动化学院学生实验报告( 2014—— 2015 学年 第 一 学期 )课程名称:人工智能导论 开课实验室: 年 月 日一、实验内容和要求八数码问题:在3×3的方格棋盘上,摆放着1到8这八个数码,有1个方格是空的,其初始状态如图1所示,要求对空格执行空格左移、空格右移、空格上移和空格下移这四个操作使得棋盘从初始状态到目标状态。
例如:(a) 初始状态 (b) 目标状态图1 八数码问题示意图请任选一种盲目搜索算法(广度优先搜索或深度优先搜索)或任选一种启发式搜索方法(全局择优搜索,加权状态图搜索,A 算法或 A * 算法)编程求解八数码问题(初始状态任选)。
选择一个初始状态,画出搜索树,填写相应的OPEN 表和CLOSED 表,给出解路径,对实验结果进行分析总结,得出结论。
实验报告内容格式要求:XXXXXXXXXXXX (中文:宋体,小四;英文:Times New Roman )。
二、实验目的1. 熟悉人工智能系统中的问题求解过程;2. 熟悉状态空间的盲目搜索和启发式搜索算法的应用;3. 熟悉对八数码问题的建模、求解及编程语言的应用。
三、实验算法启发函数设定由八数码问题的部分状态图可以看出,从初始节点开始,在通向目标节点的路径上,各节点的数码格局同目标节点相比较,其数码不同的位置个数在逐渐减少,最后为零,因此可以把数码不同的位置个数作为标志一个节点到目标节点距离远近的一个启发性信息,利用这个信息来扩展节点的选择,减少搜索范围,提高搜索速度。
2、数据结构与算法设计数码结构体typedef struct node //八数码结构体{int form[N][N]; //数码组int evalue; //评估值,差距int udirec; //所屏蔽方向,防止往回推到上一状态,1上2下3左4右struct node *parent; //父节点}Graph;Graph *Qu[MAX];//队列Graph *St[MAX];//堆栈搜索过程:(搜索采用广度搜索方式,利用待处理队列辅助,逐层搜索(跳过劣质节点))a、把初始数码组压入队列;b、从队列中取出一个数码组节点;c、扩展子节点,即从上下左右四个方向移动空格,生成相应子节点:d、对子节点数码组作评估,是否为优越节点,即其评估值是否小于等于其父节点加一,是则将其压入队,否则抛弃。
人工智能课内实验报告(一)----主观贝叶斯一、实验目的1.学习了解编程语言, 掌握基本的算法实现;2.深入理解贝叶斯理论和不确定性推理理论;二、 3.学习运用主观贝叶斯公式进行不确定推理的原理和过程。
三、实验内容在证据不确定的情况下, 根据充分性量度LS 、必要性量度LN 、E 的先验概率P(E)和H 的先验概率P(H)作为前提条件, 分析P(H/S)和P(E/S)的关系。
具体要求如下:(1) 充分考虑各种证据情况: 证据肯定存在、证据肯定不存在、观察与证据 无关、其他情况;(2) 考虑EH 公式和CP 公式两种计算后验概率的方法;(3) 给出EH 公式的分段线性插值图。
三、实验原理1.知识不确定性的表示:在主观贝叶斯方法中, 知识是产生式规则表示的, 具体形式为:IF E THEN (LS,LN) H(P(H))LS 是充分性度量, 用于指出E 对H 的支持程度。
其定义为:LS=P(E|H)/P(E|¬H)。
LN 是必要性度量, 用于指出¬E 对H 的支持程度。
其定义为:LN=P(¬E|H)/P(¬E|¬H)=(1-P(E|H))/(1-P(E|¬H))2.证据不确定性的表示在证据不确定的情况下, 用户观察到的证据具有不确定性, 即0<P(E/S)<1。
此时就不能再用上面的公式计算后验概率了。
而要用杜达等人在1976年证明过的如下公式来计算后验概率P(H/S):P(H/S)=P(H/E)*P(E/S)+P(H/~E)*P(~E/S) (2-1)下面分四种情况对这个公式进行讨论。
(1) P (E/S)=1当P(E/S)=1时, P(~E/S)=0。
此时, 式(2-1)变成 P(H/S)=P(H/E)=1)()1()(+⨯-⨯H P LS H P LS (2-2) 这就是证据肯定存在的情况。
(2) P (E/S)=0当P(E/S)=0时, P(~E/S)=1。
课程名称:人工智能论文题目:中文语音识别技术的最新研究进展学院:信息工程与自动化学院专业:计算机科学与技术年级: 09级学生姓名:孙浩川(200910405310)指导教师:王剑教务处制摘要本文简要介绍了语音识别技术的发展历史,所采用的关键技术以及所面临的困难与挑战,最后讨论了语音识别在通信等领域中的应用。
机器能听懂人类的语言吗?我们能扔掉键盘、鼠标用自然语言操纵计算机吗?随着语音识别技术的发展,梦想正在变为现实。
语音识别以语音为研究对象,它是语音信号处理的一个重要研究方向,是模式识别的一个分支,涉及到生理学、心理学、语言学、计算机科学以及信号处理等诸多领域,甚至还涉及到人的体态语言(如人在说话时的表情、手势等行为动作可帮助对方理解),其最终目标是实现人与机器进行自然语言通信。
简要介绍语音识别的发展历史,采用的关键技术,面临的困难与挑战以及广阔的应用前景。
关键字:中文、语音识别、技术、发展目录一、语音识别技术的发展历史 (3)1、国外的发展形势 (3)2、国内的发展 (3)二、语音识别技术发展所面临的困难 (4)1、认识语音识别系统 (4)2、面临的困难 (4)3、解决困难的方法 (5)三、语音识别技术的应用以及发展前景 (5)1、目前语音识别技术在许多领域的应用 (5)2、对语音识别技术的发展前景 (6)四、结束语(结论) (6)谢辞 (7)参考文献 (8)一、语音识别技术的发展历史1、国外的发展形势首先,从国外的形势看来。
语音识别的研究工作可以追溯到20世纪50年代AT&T 贝尔实验室的Audry系统,它是第一个可以识别十个英文数字的语音识别系统。
但真正取得实质性进展,并将其作为一个重要的课题开展研究则是在60年代末70年代初。
实验室语音识别研究的巨大突破产生于20世纪80年代末:人们终于在实验室突破了大词汇量、连续语音和非特定人这三大障碍,他们把原本艰涩的HMM纯数学模型工程化,从而使统计方法成为了语音识别技术的主流,更多地从整体平均的角度来建立最佳的语音识别系统。
山西财经大学信息管理学院王保忠编《人工智能实验指导书》适用专业:计算机科学与技术信息管理与系统信息科学与计算一、学时与学分总学时:48;总学分:4;实验学时:16;实验学分:1二、实验课的任务、性质与目的本实验课程是计算机专业、信息管理与系统学生的一门专业课程,通过实验软件环境提供的大量演示性、验证性和开发设计性实验,帮助学生更好地熟悉和掌握人工智能的基本原理和方法;通过实验提高学生编写实验报告、总结实验结果的能力;使学生对人工智能的相关理论有更深刻的认识。
三、基本原理本实验涉及人工智能的经典理论和方法,以及计算智能的部分分支和实现方法,主要包括以下内容:1. 产生式系统实验2. 搜索策略实验3. 神经网络实验4. 自动规划实验四、实验方式与基本要求本实验目的是使学生进一步加深对人工智能的基本原理和方法的认识,通过实践了解人工智能的实现手段。
实验方式:1. 实验共16学时;2. 由指导教师讲解实验的基本要求,提示算法的基本思想;3. 实验一人一组,独立完成实验的演示、验证和开发设计;4. 学生在完成预习报告后才能进入实验室进行实验。
五、实验项目的设置与内容提要《人工智能实验指导书》实验名称实验目的内容简介1 产生式系统实验熟悉和掌握产生式系统的运行机制,掌握基于规则推理的基本方法主要包括产生式系统的正、反向推理、基于逻辑的搜索等10余个相关演示性、验证性和开发性设计实验。
2 搜索策略实验熟悉和掌握启发式搜索的定义、估价函数和算法过程,并利用A*算法求解N数码难题,理解求解流程和搜索顺序。
主要包括盲目式、启发式搜索类的10余个相关演示性、验证性和开发性设计实验。
3 神经网络实验理解反向传播网络的结构和原理,掌握反向传播算法对神经元的训练过程,了解反向传播公式。
通过构建BP网络实例,熟悉前馈网络的原理及结构。
主要包括以BP网为代表的ANN的验证性实验及设计性实验。
并包括用BP网解决一些非线性问题的典型设计实验(如异或问题、布尔代数及非线性函数模拟等)4 自动规划实验理解自动规划的基本原理,掌握为活动实体(人、组织、机器)设计合理的行为、按时间顺序的活动序列等基本技术。
《人工智能导论》课程实验大纲实验学时:8 课程总学时:46适用专业:计算机科学与技术、软件工程实验项目数:1开课教研室(系):计算机工程大纲执笔人:廉师友一、课程实验的基本理论和目的《人工智能导论》课程主要讲述搜索与问题求解、知识表示与推理、机器学习与知识发现、专家系统、Agent系统、智能化网络和智能程序设计等。
其中专家系统及其设计与实现,涉及该课程的大部分内容,如知识表示与推理、搜索与问题求解、专家系统和智能程序设计等,而且实践性和应用性都很强。
因此,该课程将专家系统设计与实现作为一个上机实验项目,以加深学生对课程内容的理解和掌握,并培养学生综合运用所学知识开发智能系统的初步能力和独立分析问题、解决问题的能力。
二、课程实验的基本要求1.实验前,要认真阅读实验指导书,明确实验目的、内容、方法、步骤和目标;2.自选具体的应用领域,白拟具体的系统名称,但内容绝对不能雷同;3.所实现的专家系统必须上机运行演示;4.提交实验报告。
三、实验项目的设置、内容和学时分配实验项目:1个实验题目:小型专家系统设计与实现(具体应用领域由学生自选,具体系统名称由学生自定。
)实验内容:知识获取与表示、知识库组建、推理机选择/编制、系统调试与测试。
实验学时:8学时四、实验课的考核方法与评分办法采用实验过程考查、实验结果验收和实验报告评阅相结合的考核方法,综合评定实验成绩。
其具体评分标准如下:1.实验准备(所需数据、程序、图形等)20分;2.实验过程(态度、操作、处理问题能力等)20分;3.实验结果(正确性、可用性、创新性等)40分;4.实验报告(格式、内容(翔实、无误)、叙述等)20分;满分共计100分。
审定人: 批准人:。
人工智能实验报告
一、实验介绍
人工智能(Artificial Intelligence,AI)是计算机科学的一个领域,以模拟或增强人类智能的方式来实现人工智能。
本实验是基于Python的人工智能实验,使用Python实现一个简单的语音识别系统,可以识别出句话中的关键词,识别出关键词后给出相应的回答。
二、实验内容
1.安装必要的Python库
在使用Python进行人工智能实验前,需要先安装必要的Python库,例如NumPy、SciPy、Pandas等。
2.准备必要的数据集
为避免过拟合,需要准备数据集并对数据进行分离、标准化等处理,以便为训练和测试模型提供良好的环境。
3.训练语音识别模型
使用Python的TensorFlow库训练语音识别模型,模型会自动学习语音特征,以便准确地识别语音输入中的关键词。
4.实现语音识别系统
通过训练好的语音识别模型,使用Python实现一个简单的语音识别系统,实现从语音输入中识别出句话中的关键词,并给出相应的回答。
三、实验结果
本实验使用Python编写了一个简单的语音识别系统,实现从语音输
入中识别出句话中的关键词,并给出相应的回答。
通过对训练数据集的训练,模型可以准确地识别语音输入中的关键词,对测试数据集的准确率达到了87.45%,表示模型的效果较好。
四、总结。
现代电子技术Modern Electronics TechniqueDec. 2023Vol. 46 No. 242023年12月15日第46卷第24期0 引 言多标签文本分类是文本分类的子任务,是从标签集合中选中具体标签,为每个实例分配最相关的类标签子集,目前已广泛应用在信息检索[1]、情感计算[2]、情感分析[3]、邮件垃圾邮件检测[4]和多模态情感分析[5]等领域。
多标签文本分类比单标签分类更复杂,每个实例都涉及到一个或多个类别,且类别数量不固定,部分类别之间往往是相互关联的,因此多标签文本分类是自然语言处理中一个重要而又具有挑战性的课题。
现如今在多标签文本分类的任务中,标签分类变得极为复杂,很多时候都出现了“长尾”分布,也就是标签不平衡。
所谓的标签不平衡问题,就是指数据集头部标签有很多的实例,但是在尾标签中较少存在甚至只有几个实例,导致标签下的数据严重不平衡,即可以理解为标签“长尾”的问题。
面对标签不平衡问题,在数据层面,主要的方法中根据数据本身进行一些替换,构造噪DOI :10.16652/j.issn.1004‐373x.2023.24.028引用格式:苗育华,李格格,线岩团.融合标签关联的隐空间数据增强多标签文本分类方法[J].现代电子技术,2023,46(24):159‐164.融合标签关联的隐空间数据增强多标签文本分类方法苗育华1,2, 李格格1,2, 线岩团1,2(1.昆明理工大学 信息工程与自动化学院, 云南 昆明 650500; 2.昆明理工大学 云南省人工智能重点实验室, 云南 昆明 650500)摘 要: 多标签文本分类是自然语言处理中文本分类任务的一个分支。
目前单标签的文本分类算法已经较为成熟,但是多标签文本分类仍是一项重要而且有挑战的任务。
在多标签文本分类任务中,标签之间往往存在关联,但各类标签在样本数量上存在较为严重的不平衡问题。
为此,文中提出一种利用标签之间的先验知识,在隐空间中进行数据增强的方法,缓解多标签文本分类数据不平衡造成的模型过拟合及泛化能力差的问题。
人工智能技术实验指导书实验背景本实验指导书旨在帮助学生深入了解人工智能技术的基础原理及应用方法。
通过本实验,学生将能掌握人工智能技术的基本概念、算法和编程技能,为未来在人工智能领域的研究和研究打下坚实基础。
实验目的本实验旨在培养学生的人工智能算法设计和编程能力,提高学生对人工智能技术的理解和应用能力。
实验内容实验一:人工智能算法基础- 研究人工智能算法的基本概念和分类;- 掌握常见的人工智能算法原理和实现方法;- 利用Python编程语言实现简单的人工智能算法。
实验二:机器研究算法实践- 掌握机器研究算法的基本原理和应用方法;- 研究使用机器研究库进行数据预处理和算法训练;- 利用已有数据集,实现一个简单的机器研究算法模型。
实验三:深度研究算法应用- 理解深度研究算法的基本原理和结构;- 研究使用深度研究框架进行神经网络模型的设计和训练;- 实现一个简单的深度研究算法应用案例。
实验要求- 学生应具备基本的编程能力,熟悉Python编程语言;- 学生应具备基本的数学和统计知识,对概率和线性代数有一定了解;- 学生应具备良好的逻辑思维能力和问题解决能力。
实验评估- 实验报告:学生需按要求书写并提交实验报告,内容包括实验目的、方法、实验结果和分析等;- 实验成绩:根据实验报告和实验结果,对学生的实验成果进行综合评估。
实验资源- 教材:提供相关的教材和参考书籍,供学生参考和研究;- 软件工具:提供相应的编程环境和开发工具,供学生进行实验操作和编程实现。
实验安排- 实验时间:本实验预计需要3周的时间完成;- 实验地点:学生可以自行选择合适的实验地点进行实验。
注意事项- 学生在进行实验时,应遵守实验室规定和安全操作流程;- 学生在编写实验报告时,应保证报告内容真实可信。
参考资料- 《人工智能导论》- 《机器研究实战》- 《深度学习》。
文献引用格式: - 99.].Video Engineering,2021,中图分类号:MSSD摘要:但是其对额外层的处理方式还需要进一步提升。
因此,法加强特征复用,训练后,达在速度和精度上取得了较好的平衡性。
关键词Abstract:needs to be further improved. This article uses the idea of depthwise separable convolution to design a new depthwise separable convolution module to improve the extra layers in the model, and uses the adjacent features fusion method to strengthen the reuse of features, designs an improvement object detection model Modified SSD(MSSD). After the model is trained on the VOC201279of SSD, the performance of MSSD also has certain advantages, achieving a better balance between speed and accuracy.Keywords:VGG有着更好的特征提取能力,征融合后实现了更高的精度,测,取得了更好的效果。
但是,量的增加,它的检测速度稍慢。
FSSD征融合策略将低层的特征图拼接融合,的尺寸为38×38特征提取工作,DenseSSD[7]在结构中设计了部采用类似瓶颈结构,它的特征复用类似进行特征融合。
RFBNet的信息差异出发,利用大小不同的感受野的卷积核进行特征提取。
每个待预测特征图会通过各自的分类和位置回归网筛选、(Depthwise Separable Convolution)Xception[11]的核心。
昆明理工大学信息工程与自动化学院学生实验报告(2011 —2012 学年第 1 学期)课程名称:人工智能开课实验室: 444 2011年 12 月 9日年级、专业、班计科093 学号200910405310 姓名孙浩川成绩实验项目名称传教士与野人过河问题指导教师王剑教师评语该同学是否了解实验原理: A.了解□ B.基本了解□ C.不了解□该同学的实验能力: A.强□ B.中等□ C.差□该同学的实验是否达到要求: A.达到□ B.基本达到□ C.未达到□实验报告是否规范: A.规范□ B.基本规范□ C.不规范□实验过程是否详细记录: A.详细□ B.一般□ C.没有□教师签名:年月日一、实验目的及内容实验目的:理解并熟悉掌握深度优先搜索和广度优先搜索地方法。
实验内容:设有3个传教士和3个野人来到河边,打算乘一只船从右岸到左岸去。
该船的负载能力为两人。
在任何时候,如果野人人数超过传教士人数,野人就会把传教士吃掉。
他们怎样才能用这条船安全的把所有人都渡过河去?二、实验原理及基本技术路线图(方框原理图或程序流程图)三、所用仪器、材料(设备名称、型号、规格等或使用软件)1台PC以及VISUAL C++6.0软件四、实验方法、步骤(或:程序代码或操作过程)#include <stdio.h>#include <stdlib.h>#include <ctype.h>#define maxloop 100 /* 最大层数,对于不同的扩展方法自动调整取值 */#define pristnum 3 /*初始化时设定有3个野人3个传教士,实际可以改动*/#define slavenum 3struct SPQ{ int sr,pr; /* 船运行一个来回后河右岸的野人、传教士的人数 */int sl,pl; /* 船运行一个来回后河左岸的野人、传教士的人数 */ int ssr,spr; /* 回来(由左向右时)船上的人数 */int sst,spt; /* 去时(由右向左时)船上的人数 */int loop; /* 本结点所在的层数 */struct SPQ *upnode ,*nextnode;/* 本结点的父结点和同层的下一个结点的地址 */}spq;int loopnum;/* 记录总的扩展次数 */int openednum;/* 记录已扩展节点个数 */int unopenednum;/* 记录待扩展节点个数 */int resultnum;struct SPQ *opened;struct SPQ *oend;struct SPQ *unopened;struct SPQ *uend;struct SPQ *result;void initiate();void releasemem();void showresult();void addtoopened(struct SPQ *ntx);int search();void goon();int stretch(struct SPQ* ntx);void recorder();int main(){int flag; /* 标记扩展是否成功 */ for( ; ; ){initiate();flag = search ();if(flag == 1){recorder();releasemem();showresult();goon();}else{printf("无法找到符合条件的解"); releasemem();goon();}}system("pause");return 0;}void initiate(){int x;char choice;uend = unopened = (struct SPQ*)malloc(sizeof(spq));if(uend==NULL){printf("\n内存不够!\n");exit(0);}unopenednum=1;openednum=0;unopened -> upnode = unopened; /* 保存父结点的地址以成链表 */ unopened -> nextnode = unopened;unopened -> sr = slavenum;unopened -> pr = pristnum;unopened -> sl = 0;unopened -> pl = 0;unopened -> sst = 0;unopened -> spt = 0;unopened -> ssr = 0;unopened -> spr = 0;unopened -> loop = 0;printf("计科093班孙浩川 200910405310\n\n");printf("设有3个传教士和3个野人来到河边,打算乘一只船从右岸到左岸去。
该船的负载能力为两人。
在任何时候,如果野人人数超过传教士人数,野人就会把传教士吃掉。
他们怎样才能用这条船安全的把所有人都渡过河去?\n");/*printf("该船的负载能力为两人。
在任何时候,如果野人人数超过传教士人数,野人\n");printf("就会把传教士吃掉。
他们怎样才能用这条船安全的把所有人都渡过河去?\n");*/for(;;){printf("\n是否开始?(Y/N)");scanf("%s",&choice);choice=toupper(choice);if(choice=='N'){printf("\n请输入传教士人数");for(;;){scanf("%d",&x);if(x>0){unopened -> pr = x;break;}else printf("\n输入值应大于0!\n请重新输入"); }printf("\n请输入野人人数");for(;;){scanf("%d",&x);if(x>0){unopened -> sr = x;break;}else printf("\n输入值应大于0!\n请重新输入"); }break;}if(choice=='Y')break;}}int search(){int flag;struct SPQ *ntx; /* 提供将要扩展的结点的指针 */for( ; ; ){ntx = unopened; /* 从待扩展链表中提取最前面的一个 */if(ntx->loop == maxloop)return 0;addtoopened(ntx); /* 将ntx加入已扩展链表,并将这个节点从待扩展链表中去掉 */flag = stretch(ntx); /* 对ntx进行扩展,返回-1,0,1 */if(flag == 1)return 1;}}int stretch(struct SPQ *ntx){int fsr , fpr ; /* 在右岸上的人数 */int fsl , fpl ; /* 在左岸上的人数 */int sst , spt ; /* 出发时在船上的人数 */int ssr , spr ; /* 返回时船上的人数 */struct SPQ *newnode;for (sst = 0 ; sst <= 2 ; sst++) /* 讨论不同的可能性并判断是否符合条件 */{fsr = ntx -> sr;fpr = ntx -> pr;fsl = ntx -> sl;fpl = ntx -> pl;if ((sst <= fsr) && (( 2 - sst) <= fpr))/* 满足人数限制 */{spt = 2 - sst;fsr = fsr - sst;fpr = fpr - spt;if((fpr == 0) && (fsr == 0))/* 搜索成功 */{newnode = (struct SPQ*) malloc (sizeof(spq));if(newnode==NULL){printf("\n内存不够!\n");exit(0);}newnode -> upnode = ntx; /* 保存父结点的地址以成链表 */newnode -> nextnode = NULL;newnode -> sr = 0;newnode -> pr = 0;newnode -> sl = opened -> sr;newnode -> pl = opened -> pr;newnode -> sst = sst;newnode -> spt = spt;newnode -> ssr = 0;newnode -> spr = 0;newnode -> loop = ntx -> loop + 1;oend -> nextnode = newnode;oend = newnode;openednum++;return 1;}else if ((fpr - fsr) * fpr >= 0) /* 判断是否满足传教士人数必须大于或等于野人人数 */{fsl = fsl + sst;fpl = fpl + spt;for (ssr = 0 ; ssr <= 1 ; ssr++) /* 返回 */{int ffsl , ffpl;if ((ssr <= fsl) && ((1 - ssr) <= fpl)){spr = 1 - ssr;ffsl = fsl - ssr;ffpl = fpl - spr;if ((ffpl - ffsl) * ffpl >= 0){ /* 若符合条件则分配内存并付值 */int ffsr , ffpr;ffsr = fsr + ssr;ffpr = fpr + spr;newnode = (struct SPQ*) malloc (sizeof(spq));if(newnode==NULL){printf("\n内存不够!\n");exit(0);}newnode -> upnode = ntx; /* 保存父结点的地址以成链表 */newnode -> sr = ffsr;newnode -> pr = ffpr;newnode -> sl = ffsl;newnode -> pl = ffpl;newnode -> sst = sst;newnode -> spt = spt;newnode -> ssr = ssr;newnode -> spr = spr;newnode -> loop = ntx -> loop + 1;uend -> nextnode = newnode;uend = newnode;unopenednum++;}}}}}}return 0;}void addtoopened(struct SPQ *ntx){unopened = unopened -> nextnode;unopenednum--;if (openednum == 0 )oend = opened = ntx;oend -> nextnode = ntx;oend = ntx;openednum++;}void recorder(){int i , loop;struct SPQ *newnode;struct SPQ *ntx;loop = oend -> loop;ntx = oend;resultnum = 0;for( i = 0 ; i <= loop ; i++ ){newnode = (struct SPQ*) malloc (sizeof(spq)); if(newnode==NULL){printf("\n内存不够!\n");exit(0);}newnode -> sr = ntx -> sr;newnode -> pr = ntx -> pr;newnode -> sl = ntx -> sl;newnode -> pl = ntx -> pl;newnode -> sst = ntx -> sst;newnode -> spt = ntx -> spt;newnode -> ssr = ntx -> ssr;newnode -> spr = ntx -> spr;newnode -> nextnode = NULL;ntx = ntx -> upnode;if(i == 0)result = newnode;newnode -> nextnode = result;result = newnode;resultnum++;}}void releasemem(){int i;struct SPQ* nodefree;for ( i = 1 ; i < openednum ; i++ ) {nodefree = opened;opened = opened -> nextnode;free(nodefree);}for ( i = 0 ; i < unopenednum ; i++ ) {nodefree = unopened;unopened = unopened -> nextnode; free(nodefree);}}void showresult(){int i;int fsr , fpr ; /* 在右岸上的人数 */ int fsl , fpl ; /* 在左岸上的人数 */ struct SPQ* nodefree;printf("%d个传教士",result -> pr);printf("%d个野人",result -> sr);printf("%d个传教士",result -> pl);printf("%d个野人",result -> sl);for ( i = 1 ; i < resultnum ; i++ ){nodefree = result;result = result -> nextnode;free(nodefree);// printf("\n\n\t左岸人数船上人数及方向右岸人数\n");printf("第%d轮\n",i);fpl = result -> pl - result -> spt + result -> spr;fpr = result -> pr - result -> spr;fsl = result -> sl - result -> sst + result -> ssr;fsr = result -> sr - result -> ssr;printf("传教士\t左岸%d人,船上%d人,向左,右岸%d人\n",fpl,result -> spt,fpr);printf("野人\t左岸%d人,船上%d人,向左,右岸%d人\n",fsl,result -> sst,fsr);printf("传教士\t左岸%d人,船上%d人,向右,右岸%d人\n",result -> pl,result -> spr,result -> pr - result -> spr);printf("野人\t左岸%d人,船上%d人,向右,右岸%d人\n",result -> sl,result -> ssr,result -> sr - result -> ssr);}printf("\n全体传教士和野人全部到达对岸");free(result);}void goon(){char choice;for(;;){printf("是否继续?(Y/N)\n");scanf ("%s" , &choice);choice=toupper(choice);if(choice=='Y')break;if(choice=='N')exit(0);}}五、实验过程原始记录( 测试数据、图表、计算等)六、实验结果、分析和结论(误差分析与数据处理、成果总结等。