.

.

“数据结构与算法综合实验”课程设计报告

题目:

农夫过河问题

学 院

计算机科学技术

年 级

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所示:

0010

1010

0000x

00001011

1110

0100

0100

0001

0001

111101011101

1111

0101

1101

图1系统状态转换结构图

(2)软件结构设计

农夫过河管理系统根据需求分析中的功能分析,可以提炼出主要有搜索功能,判断事物安全功能,输出过河方案功能。而搜索功能又可以利用不同算法,如广度优先算法,深度优先算法等等。判断事物安全功能需要将事物位置进行分析,通过位置分布的代码来判断当前状态是否安全,使用“与”位操作来考察狼和羊、羊和白菜是否在同一侧,且它们与农夫不一侧。若是,该状态即为不安全状态,否则为安全状态。若一个状态已经被访问过,或只有农夫一人从南岸过到北岸,则该状态被判为无效状态。输出功能就是将过河方案在屏幕上进行显示。系统软件结构如图1所示

判断安全模块输出模块搜索模块

判断安全模块

输出模块

搜索模块

输出过河方案 农夫过河 问题

输出过河方案

农夫过河 问题

安全有效路径农夫携带物品深度优先搜索广度优先搜索

安全有效路径

农夫携带物品

深度优先搜索

广度优先搜索

图1农夫过河管理系统软件模块结构图

4.系统详细设计与实现

(1)搜索算法设计

搜索过程可利用广度优先搜索算法从初始状态二进制0000(全部在河的南岸)出发,寻找一种全部由安全状态构成的状态序列,它以二进制1111(全部到达河的北岸)为最终目标,并且在序列中的每一个状态都可以从前一个状态得到。为避免重复,要求在序列中不出现重复的状态。

(2)确定状态的安全有效性的功能模块设计

通过位置分布的代码来判断当前状态是否安全,使用“与”位操作来考察狼和羊、羊和白菜是否在同一侧,且它们与农夫不一侧。若是,该状态即为不安全状态,否则为安全状态。若一个状态已经被访问过,或只有农夫一人从南岸过到北岸,则该状态被判为无效状态。若状态安全且

农夫过河实验报告c语言,农夫过河实验报告.doc相关推荐

  1. c语言贪吃蛇大作业报告,C语言贪吃蛇实验报告

    C语言贪吃蛇实验报告 C 语言程序设计实训报告姓 名 专 业 班 级 指导教师 二 011 年 7 月 14 日I I目录1 实训目的和要求 11.1 实训目的和任务 11.2 实训要求 12 实训任 ...

  2. 拼图游戏C语言课设实验报告,C语言拼图游戏实验报告.doc

    C语言拼图游戏实验报告 课程设计实验报告 班级:光电104-2 姓名:刘云龙 学号:201058501220 一.实验题目:使用C语言编写一个小游戏(拼图游戏) 二.实验目的:C语言是每一个通信学生的 ...

  3. 藏头诗c语言实验报告,c语言程序设计期末实验报告

    c语言程序设计期末实验报告 (23页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.9 积分 实验报告实验项目名称:高级语言编程实验 实验学时:3实验 ...

  4. 费诺编码实验报告c语言,信息论编码实验报告费诺编码附源代码..doc

    信息论编码实验报告费诺编码附源代码. 中南大学 信息论与编码实验报告 选 题: 费诺编码 学生姓名: 学 号: 专业班级: 通信工程 指导老师: 学 院: 信息科学与工程学院 时 间: 2015 目录 ...

  5. c语言词法分析器报告,C语言词法分析器构造实验报告.doc

    C语言词法分析器构造实验报告 02计算机(2) 2002374203 冯绍欣 一.题目要求: 完成一个C语言的词法分析器的构造.此词法分析器能识别附值语句.循环语句.条件语句.并能处理注释. 二.设计 ...

  6. 大学生上机报告C语言,大学生计算机实验总结报告.doc

    大学生计算机实验总结报告 实验相对于每个人来说都有着特殊的意义,一般意义上来说他肯定是都会有不一样的心得体会,对于那些学习过实验后的人来说记录下这些心得体会是十分重要的,写一份实验心得体会他不仅仅能抒 ...

  7. 线性分组码c语言实验报告,C语言线性分组码(附注释).doc

    C语言线性分组码(附注释).doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该 ...

  8. c语言个人理财系统设计报告,C语言家庭财务管理系统设计报告

    C语言家庭财务管理系统设计报告 东华理工大学 C语言课程设计实验报告 题目:家庭账务管理 姓名:曾祥华 班级:1321815 学号:201320181518 指导老师:程志梅 一 案例描述 1.总体描 ...

  9. c语言学生考勤系统课设报告,C语言课程设计总结报告学生考勤系统设计

    C语言课程设计总结报告学生考勤系统设计 C语言程序设计课程设计报告设计题目:学生考勤系统设计专 业 自 动 化 班 级 自 动 化 071 学 生 朱 胜 佳 指导教师 梁 德 胜 2008 年 春季 ...

最新文章

  1. 来一场说聊就聊的压测分享
  2. golang 删除目录所有内容
  3. 对flex-grow和flex-shrink的深入理解
  4. MediaCodec的使用和若干问题处理
  5. 如何导入asl文件?ps制作知识
  6. 《2019年数据及存储发展研究报告》十大洞察
  7. 2019最新某私塾在线高级java软件架构师实战培训教程
  8. AE(4)实例:更换衣服色彩
  9. 局域网服务器共享不稳定怎么办,局域网计算机文件共享异常解决方案
  10. java 生成拼音_JAVA生成拼音码
  11. Vuforia Vumark初探
  12. python爬取微博图片教程_python实现爬取微博相册所有图片
  13. 软件系统产品线特征及构建过程
  14. 第二阶段:数据库设计与初始化
  15. C语言串口编程收发数据 并实现AT指令的收发 可变参数控制串口属性 树莓派4G模块
  16. CF791A Bear and Big Brother 【题解】
  17. c语言整数除法转换成浮点型,C语言中的类型转换
  18. 【数据结构-矩阵】矩阵的相关公式推导
  19. 数据结构与算法(程序员常用的十种算法:上1~5)
  20. 红绿灯pipeline探索

热门文章

  1. python经理培训
  2. 最新spark函数大全
  3. 经济学人万字总结17年AI领域并购趋势:谷歌领跑,人才竞争白热化
  4. voice conversion
  5. 玩转STM32F0 Value Line Discovery 之 深入理解 SYSTICK定时器
  6. 挂科违纪,武汉大学清退92名外国留学生!
  7. 《无人驾驶车辆模型预测控制第一版》第五章代码(下)
  8. **关于maven的,maven配置后报 java.lang.UnsupportedClassVersionError: org/codehaus/plexus/classworlds/launche
  9. [转载]32位系统与64位系统的区别(整合三篇写的比较好的文章)
  10. 构建万物互联的智能世界,华为为何选择了智能体?