农夫过河实验报告

“数据结构与算法综合实验”课程设计报告题目: 农夫过河问题学 院计算机科学技术年 级2014级专 业计算机科学与技术学 名高晗日 期2016年3月30日星期三成 绩评 语黑龙江大学计算机科学技术学院、软件学院《数据结构与算法综合实验》报告系统概述(1)一个农夫带着一只狼、一只羊和一棵白菜,身处河的南岸,他要把这些东西全部运到北岸。他面前只有一只小船,船只能容下他和一件物品,另外只有农夫才能撑船。如果农夫在场,则狼不能吃羊,羊不能吃白菜;否则狼会吃羊,羊会吃白菜。所以农夫不能留下羊和白菜自己离开,也不能留下狼和羊自己离开,但是狼不吃白菜。要求给出农夫将所有东西运过河的方案。(2)为农夫过河问题抽象数据模型,体会数据模型在求解问题中的重要作用。 (3)掌握顺序表和队列的逻辑结构和存储结构。2.系统需求分析 (1)针对实现整个过程需要多步,不同步骤中各个事物所处位置不同的情况,可定义一个结构体来实现对四个对象狼、羊、白菜和农夫的表示。对于起始岸和目的岸,可以用0或者1来表示,以实现在程序设计中的简便性。 (2)题目要求给出四种事物的过河步骤,没有对先后顺序进行约束,这就需要给各个事物依次进行编号,然后依次试探,若试探成功,进行下一步试探。这就需要使用循环或者递归算法,避免随机盲目运算且保证每种情况均试探到,不接受非法输入。 (3)题目要求求出农夫带一只羊,一条狼和一颗白菜过河的办法,所以依次成功返回运算结果后,需要继续运算,直至求出结果,即给出农夫的过河方案。输出界面要求具有每一步中农夫所带对象及每步之后各岸的物体,需要定义不同的数组来分别存储上述内容,并使界面所示方案清晰简洁。 (4)实验运行环境为VC++6.0.3.系统概要设计(1)数据结构设计 要模拟农夫过河的问题,用四位二进制数顺序分别表示农夫,狼,羊,白菜的位置。用0表示农夫或某种东西在河的南岸,1表示在河的北岸。则问题的初始状态是整数(二进制数表示为0000);问题的终结状态是整数15(二进制表示为1111) 用一个整数队列MoveTo把搜索过程中所有可能达到的状态都保存起来。队列中的每一个元素表示一个可以到达的中间状态。另外用一个整数数组route记录被访问过的状态,以及已经被发现的能够到达这些状态的前驱。 数组只需使用16个元素,每个元素的初始化值均为-1,每当队列中加入一个新状态时,数组中以该状态做下标的元素改为到达这一状态的前一状态的下标值。所以数组的第i个元素不仅记录状态i是否被过,同时还保存该状态的前驱状态下标。算法结束后可以利用route数组元素的值生成一个正确的状态路径。系统状态转换结构如图1所示:0000x1011111001000001111101011101图1系统状态转换结构图 (2)软件结构设计农夫过河管理系统根据需求分析中的功能分析,可以提炼出主要有搜索功能,判断事物安全功能,输出过河方案功能。而搜索功能又可以利用不同算法,如广度优先算法,深度优先算法等等。判断事物安全功能需要将事物位置进行分析,通过位置分布的代码来判断当前状态是否安全,使用“与”位操作来考察狼和羊、羊和白菜是否在同一侧,且它们与农夫不一侧。若是,该状态即为不安全状态,否则为安全状态。若一个状态已经被访问过,或只有农夫一人从南岸过到北岸,则该状态被判为无效状态。输出功能就是将过河方案在屏幕上进行显示。系统软件结构如图1所示图1农夫过河管理系统软件模块结构图4.系统详细设计与实现(1)搜索算法设计搜索过程可利用广度优先搜索算法从初始状态二进制0000(全部在河的南岸)出发,寻找一种全部由安全状态构成的状态序列,它以二进制1111(全部到达河的北岸)为最终目标,并且在序列中的每一个状态都可以从前一个状态得到。为避免重复,要求在序列中不出现重复的状态。(2)确定状态的安全有效性的功能模块设计通过位置分布的代码来判断当前状态是否安全,使用“与”位操作来考察狼和羊、羊和白菜是否在同一侧,且它们与农夫不一侧。若是,该状态即为不安全状态,否则为安全状态。若一个状态已经被访问过,或只有农夫一人从南岸过到北岸,则该状态被判为无效状态。若状态安全且有效,则返回1,否则返回0。该模块算法流程图如图2所示。 开始否 全在南岸? 否是 状态是否安全? 是是 是否重复?否 全在北岸?否是结束 图2 确定状态的安全有效性的功能模块设计算法流程图 (3)输出模块设计输出农夫过河问题的可行性方案时,可从目标状态(1111)开始,将其记入队列(或栈)中,然后再找出其前驱,记入队列(或栈)中,然后在找其前驱,…,直到找到的是开始状态(0000)为止。要求输出时根据位置分布代码(即4位二进制数)各个位置上的0、1代码所表示的含义输出容易理解的文字。5.系

c语言课程农夫过河问题实验心得,农夫过河实验报告.docx相关推荐

  1. 计算机交换机配置实验心得,网络配置实验心得

    <网络配置实验心得>由会员分享,可在线阅读,更多相关<网络配置实验心得(10页珍藏版)>请在人人文库网上搜索. 1.网络配置实验心得 #网络配置实验心得1#1.实验目的理解IC ...

  2. 计算机交换机配置实验心得,交换机系统配置实验心得5

    你还在为交换机基本配置实验报告而烦恼么?不用担心,下面就是小编带来的交换机系统配置实验心得,希望能帮助大家! 交换机系统配置实验心得1 单交换机的VLAN配置 [基本原理] VLAN(Virtual ...

  3. c语言实验心得100字,实验心得100字_100个面试常见经典问题_100个面试问题和答案...

    职场范文网专题频道"实验心得100字"的相关文章,提供与"实验心得100字"的所有资讯,希望我们所做的能让您感到满意! 在维护工作中,我们发现有些基站的蓄电池使 ...

  4. 单片机双机通信c语言实验心得,双机通讯实验报告

    <双机通讯实验报告>由会员分享,可在线阅读,更多相关<双机通讯实验报告(11页珍藏版)>请在人人文库网上搜索. 1.精选文档单片机实验报告(自动化15级) 实验名称:串行通讯实 ...

  5. java数值计算实验心得体会,计算方法实验心得体会

    计算机实验报告 要有心得体会的 计算机实验心得体会 通过一个学期对<计算机网络实用技术>这门课程的学习,对于我来说它已不陌生. 首先对于课程安排,感觉很紧凑,几乎不遗漏任何的知识点. 理论 ...

  6. 用计算机做科学实验心得体会,做实验的心得体会3篇

    生物学是一门以做实验为基础的自然科学,现代生物科学的发展尤其依赖科学实验.下面是学习啦带来的做实验心得体会,欢迎欣赏. 做实验的心得体会一: 实验教学是电工课教学的重要组成部分,电工知识的讲授离不开实 ...

  7. 计算机实验报告心得体会100字左右,[物理实验心得体会] 物理实验心得100字

    篇一:物理实验心得体会 学习物理实验心得体会 转眼我们已经学了一个多学期的大学物理实验了,大学物理实验是一门十分有趣的课,它把理论和实际结合在一起,它让我们更好的了解了物理所带给我们的力量. 在我看来 ...

  8. 微型计算机原理实验心得,微机原理实验心得体会

    好文网为大家准备了关于微机原理实验心得体会的文章,好文网里面收集了五十多篇关于好微机原理实验心得体会好文,希望可以帮助大家.更多关于微机原理实验心得体会内容请关注好文网.ctrl+D请收藏!篇一:微机 ...

  9. 微型计算机原理实验心得,微机原理实验心得体会.doc

    微机原理实验心得体会 PAGE PAGE 20 微机原理实验心得体会 篇一:微机原理实验总结微机原理实验总结不知不觉,微机原理与接口技术实验课程已经结束了.回想起来受益匪浅,主要是加深了对计算机的一些 ...

  10. 微型计算机原理实验心得,微机原理实验的心得体会.docx

    微机原理实验的心得体会 微机原理实验心得体会 篇一:微机原理实验总结 微机原理实验总结 不知不觉,微机原理与接口技术实验课程已经结束了.回想起来受益匪浅,主要是加深了对计算机的一些硬件情况和运行原理的 ...

最新文章

  1. 用于语义分割的特征共享协作网络
  2. android 53 ContentProvider内容提供者
  3. python项目开发案例集锦 豆瓣-Python第三个项目:爬取豆瓣《哪吒之魔童降世》 短评...
  4. Hashtable源码注释
  5. java获取当前工作目录
  6. 世界是有生命的(通向财富自由之路学习笔记十五)
  7. PHP 入门 - 7.Web技术
  8. Hadoop Mapreduce分区、分组、二次排序过程详解
  9. 链表之判断一个链表是否为回文结构(二)
  10. word List 05
  11. 在网络上提供资源的计算机,在计算机网络中通常把提供并管理共享资源的计算机称为...
  12. mysql olap 函数_Mysql中的窗口函数
  13. 800道Python习题,花了一个月终于整理出来了,挑战一下自己能做对多少题
  14. Java爬虫学习——实例:获取起点中文网站小说并保存成txt文件
  15. win10配置ffmpeg环境
  16. web服务器和app服务器
  17. JS中的事件委托 / 代理详解
  18. 视频教程-shader 基础之 2D技巧集合-Unity3D
  19. 模型的评估指标(一)
  20. matlab赋值一行,matlab – 0和1的矩阵,其中后续行中的赋值取决于前一行

热门文章

  1. Python学习笔记05----条件、循环及其他语句
  2. esp8266 AP模式控制继电器开关
  3. Android Studio Chipmunk | 2021.2.1 Patch 2(2022 年 8 月)
  4. 案例部署——GlusterFS分布式文件系统群集
  5. 伽马软件测试,伽玛(Gamma)的检测和计算
  6. ETDR 0A 电缆故障测试仪 手持便携式 电缆故障脉冲反射仪 可测30KM
  7. python和perl语言的区别_Perl 和 Python 的比较 【转】
  8. python根据掩模坐标提取数据
  9. 挂科违纪,武汉大学清退92名外国留学生!
  10. Lucas定理与扩展Lucas